我有一个带有以下代码的.NET SignalR客户端:
IHubProxy proxy = objConnection.CreateHubProxy("stockTicker");
objConnection.Start().Wait();
Console.WriteLine(objConnection.ConnectionId);
问题是客户端在30秒后挂起,需要重新连接。解决方案是更改Wait方法:
IHubProxy proxy = objConnection.CreateHubProxy("stockTicker");
await objConnection.Start();
Console.WriteLine(objConnection.ConnectionId);
我无法看到人们打电话的原因"等待"在SignalR或其他一些案例中。有没有办法让被调用的代码(在这个例子中为Start()
)知道它被调用的方式?
这个想法是,对于不应该Waited()
的用例,可以抛出异常。
答案 0 :(得分:6)
没有。但是,我希望像ReSharper这样的静态分析工具能够在不久的将来对这些条件发出警告。您甚至可以编写自己的警告,例如,使用Roslyn或Re#插件。
这是不可能的原因是因为代码:
objConnection.Start().Wait();
与:
相同var task = objConnection.Start();
task.Wait();
和代码:
await objConnection.Start();
与:
相同var task = objConnection.Start();
await task;
因此Start
明确没有(理智)方式知道代码在被调用之后会做什么。