被调用的代码是否可以用'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()的用例,可以抛出一个异常。

被调用的代码是否可以用'await&;来判断它是否被调用?“和“.wait()

No。然而,我希望像ReSharper这样的静态分析工具能够在不久的将来对这些情况发出警告。你甚至可以自己编写警告,例如,使用Roslyn或re#插件。

这是不可能的,因为代码:

objConnection.Start().Wait();

等于:

var task = objConnection.Start();
task.Wait();

和代码:

await objConnection.Start();

等于:

var task = objConnection.Start();
await task;

所以Start显然没有(合理的)方法知道代码将做什么之后它被称为