为什么在通过Edge.js从Node.js调用C#时需要等待Task.Run?
我有这个连接到Tobii EyeX眼动追踪设备的EyeX引擎的示例C#
代码,订阅凝视数据stream并将结果写入控制台。
var eyeXHost = new EyeXHost(); var stream = eyeXHost.CreateGazePointDataStream(GazePointDataMode.LightlyFiltered); eyeXHost.Start(); stream.Next += (s, e) => Console.WriteLine("Gaze point at ({0:0.0}, {1:0.0}) @{2:0}", eX, eY, e.Timestamp); Console.In.Read();
我在Edge.js的帮助下从Node.js脚本调用这段代码。 我能够得到它的工作,但我发现我不得不以我不完全理解的方式修改代码。
var eyeXHost = new EyeXHost(); var stream = eyeXHost.CreateGazePointDataStream(GazePointDataMode.LightlyFiltered); await Task.Run(() => eyeXHost.Start()); stream.Next += async (s, e) => { await onGazePoint(new GazePoint(eX, eY, e.Timestamp)); };
也就是说,我必须在await Task.Run()
调用中包装eyeXHost.Start()
。 否则,该线程似乎阻塞,并没有收到注视数据。 我还必须添加async await
到stream事件处理程序。
为什么有必要这样做?