我有以下客户端方法(.Net客户端):
public void CallServer()
{
try
{
_hubProxy.Invoke("SomeMethod");
}
catch
{
}
}
我是否正确地说这是异步的,尽管它会立即返回"而不是等待调用完成?如果是这种情况,try..catch
是否会在调用期间实际捕获任何异常,例如如果连接已关闭? (如果没有,我该怎么做?)
如果我要添加.Wait()
,这是否会使代码同步,所以它只会在调用完成后返回?
最后,在调用中使用await
是否有任何优势,或者这在调用具有返回值的服务器方法时是否有用?
答案 0 :(得分:2)
是的,调用是异步的,因此,当您尝试在实际断开连接时调用方法时,您的代码将不会捕获任何异常(最有可能)(该检查应该同步运行)。
如果您等待调用,那么您的try...catch
块会在服务器端方法调用中远程发生错误(但是还有其他事情发生,例如您必须允许详细错误到客户端)。但是,为了捕获更多与通信相关的错误,例如,与连接相关的故障,您应该在连接对象上订阅Error
事件,如下所示:
hubConnection.Error += ex => Console.WriteLine("Error: {0}", ex.Message);
点击此处: http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-net-client#handleerrors