我有一个申请流程,其中:
我以为这很简单:
服务器端:
public async void SendMessage()
{
await Task.Delay(1000);
Clients.All.SendAsync("ReceiveMessage");
}
客户端:
var hub = new signalR.HubConnectionBuilder().withUrl('/disposeBugHub').build();
this.hub.on("ReceiveMessage", function () {
alert('Message Received');
});
this.hub.start()
.then(function () {
hub.invoke("SendMessage");
})
.catch(function (err) {
return console.error(err.toString());
});
但是Clients.All.SendAsync(“ ReceiveMessage”);调用总是抛出System.ObjectDisposedException:'无法访问已处置的对象。例外。
这似乎是预期的行为,而不是错误,所以我的问题是我如何以编程方式实现所需的工作流程?我认为必须有一种众所周知的模式才能实现这一目标,但是我无法在网上找到它。
答案 0 :(得分:0)
首先,删除void
方法以长时间运行。使用Task
返回类型方法。
尝试一下。
public async Task SendMessage()
{
await Task.Delay(10000);
Clients.All.SendAsync("ReceiveMessage");
}