【发布时间】:2015-07-27 22:59:46
【问题描述】:
是否有可能知道我的方法是使用'await'关键字调用的吗?
例如; MyAsync() 方法想知道它是否正在等待。
public void CallForBackground()
{
MyAsync();
}
public async void CallAsync()
{
bool result = await MyAsync();
}
public Task<bool> MyAsync()
{
return Task.Run(() =>
{
//do something endlessly if its being called without 'await', but how do I know the caller is 'await'ing or not?
//do something only once if its being called with 'await', but how do I know the caller is 'await'ing or not?
return true;
});
}
已编辑:添加了一个场景,我想知道 MyAsync() 是否在有或没有“等待”的情况下被调用;
1) 假设 MyAsync() 正在使用 TCP 连接到远程服务器。
2) MyAsync() 是异步且可等待的。
3) 假设 UserA 想异步连接到远程服务器,一旦完成,他/她想在继续他的过程之前知道它是否成功。类似于 CallAsync() 方法的实现。
4) 并且 UserB 想要触发 MyAsync() 方法,而不是等待它完成。在这种情况下,用户 B 不关心它是否已连接,直到他向远程服务器发送消息。类似于 CallForBackground() 方法的实现。
所以对于 UserA(等待),MyAsync() 方法将尝试一次并返回状态。但是对于 UserB(不等待),方法将继续尝试。对于这个逻辑,MyAsync() 需要知道它是否正在等待。我们如何做到这一点?
【问题讨论】:
-
您希望您的方法
MyAsync根据调用位置和调用方式的不同而有所不同?简单地传递bool endlessly参数有什么问题? -
你认为你为什么需要它?
-
你永远不会用 await 调用任何东西。您正在等待一个恰好由调用返回的任务。
标签: c# async-await