我需要在服务器上启动一个可能运行几分钟的进程,因此我考虑公开以下hub方法: -
public async Task Start()
{
await Task.Run(() => _myService.Start());
}
还有一个Stop()
方法允许客户端停止正在运行的进程,可能是通过取消令牌。我还省略了代码,如果已经运行,错误处理等,则会阻止它启动。
此外,长时间运行的进程将收集需要定期广播回客户端的数据,所以我想知道如何使用事件 - 这样的事情: -
public async Task Start()
{
_myService.AfterDataCollected += AfterDataCollectedHandler;
await Task.Run(() => _myService.Start());
_myService.AfterDataCollected -= AfterDataCollectedHandler;
}
private void AfterDataCollectedHandler(object sender, MyDataEventArgs e)
{
Clients.All.SendData(e.Data);
}
这是一个可接受的解决方案还是有更好的解决方案?方式是什么?
答案 0 :(得分:0)
您不需要使用SignalR来开始工作,您可以使用现有的框架/设计/ API应用程序,并仅将pubR用于pub子部分。
我为我当前的客户项目做了这个,用户启动了一项工作,并且使用signalr更新了属于该用户的所有选项卡,我使用名为SignalR.EventAggregatorProxy的out sun库从SignalR中抽象出域。免责声明:我是该库的作者
http://andersmalmgren.com/2014/05/27/client-server-event-aggregation-with-signalr/
编辑:使用.NET客户端,您的代码看起来像这样
public class MyViewModel : IHandle<WorkProgress>
{
public MyViewModel(IEventAggregator eventAggregator)
{
eventAggregator.Subscribe(this);
}
public void Handle(WorkProgress message)
{
//Act on work progress
}
}