SignalR将中间数据发送给客户端

时间:2016-10-18 14:24:22

标签: javascript c# signalr

当我从客户端发出SignalR hub方法调用时,我可以注册到donefail promise-callbacks。但是,第三个是实用的,progress。当集线器操作需要很长时间时,我能以某种方式利用它来发送某种中间数据吗?我希望保留真实操作结果的done回调,这样我就可以拥有干净的客户端代码。

我知道我可以调用我想传递中间数据的任何客户端方法,但这有点不同,因为它与原始服务器调用无关。我希望绑定到服务器调用,你就会理解为什么。

我有一个运行几分钟的服务器操作,我想在调用后立即将ID传递给客户端,所以客户端可以取消它,例如。

这是一个划痕。

...
public async Task<LongOperationResult> SomeLongOperation(string someInputData) {

  var id = Guid.NewGuid().ToString("N");
  // store the id in a static concurrent dictionary, create a cancellation token source, etc.
  // send the id here to caller's progress callback somehow

  return await Task.Run(() => {
    // do the long processing operation
    return new LongOperationResult() { ... };
  });
}
...

在客户端

hub.server
  .someLongOperation(myInput)
  .progress(function(id) {
     // do something, bind click event of a Cancel button, etc.
   })
  .done(function(result) {
     // do something with result of type LongOperationResult
   });

我的真实场景有点复杂,允许同时运行多个任务,等等。这只是我正在寻找的例子。

0 个答案:

没有答案