被调用的代码是否可以用'await&;来判断它是否被调用?“和“.wait()
本文关键字:是否 调用 wait 判断 代码 await | 更新日期: 2023-09-27 18:17:44
我有一个。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()
的用例,可以抛出一个异常。
No。然而,我希望像ReSharper这样的静态分析工具能够在不久的将来对这些情况发出警告。你甚至可以自己编写警告,例如,使用Roslyn或re#插件。
这是不可能的,因为代码:
objConnection.Start().Wait();
等于:
var task = objConnection.Start();
task.Wait();
和代码:
await objConnection.Start();
等于:
var task = objConnection.Start();
await task;
所以Start
显然没有(合理的)方法知道代码将做什么在之后它被称为