我以前一直在使用SendAsync方法来毫无问题地调用SignalR Core集线器。我意识到,如果服务器上出现错误,我将永远无法从客户端使用SendAsync得知该错误,所以我决定使用具有完全相同参数的InvokeAsync。调用InvokeAsync时,我可以知道我的集线器已被调用并且可以正确处理,但是客户端的调用(“ await InvokeAsync”)被冻结。它只是锁定而不会进入下一行代码。这是一个WPF应用程序。可能会发生什么?等待sendAsync立即返回,并且从未以这种方式锁定。
答案 0 :(得分:0)
我发现了问题。原来是因为从WPF应用程序发送的消息也被WPF应用程序接收,当我尝试在收到消息时尝试更新UI时,这导致了阻塞问题。我将接收代码更新为使用Dispatcher.BeginInvoke,而不是Dispatcher.Invoke,现在可以正常工作了。当我从SignalR客户端调用SendAsync时,这不是问题。