为什么在通过Edge.js从Node.js调用C#时需要等待Task.Run?

时间:2017-05-10 06:33:36

标签: c# node.js asynchronous eye-tracking edgejs

我有这个样本C#代码连接到Tobii EyeX眼动追踪设备的EyeX引擎,订阅凝视数据流并将结果写入控制台。

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}", e.X, e.Y, 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(e.X, e.Y, e.Timestamp));
};

即,我必须在eyeXHost.Start()电话中打包await Task.Run()。否则,线程似乎阻止并且没有接收到凝视数据。我还必须将async await添加到流事件处理程序。

为什么有必要这样做?

0 个答案:

没有答案