为什么在通过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事件处理程序。

为什么有必要这样做?

Interesting Posts