是否可以知道我的方法是否使用'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;
});
}
Run Code Online (Sandbox Code Playgroud)
编辑:添加了一个场景,我想知道是否使用'await'调用MyAsync();
1)假设MyAsync()使用TCP连接到远程服务器.
2)MyAsync()是异步的并且是等待的.
3)假设UserA想要异步连接到远程服务器,一旦完成,他/她想在继续他的过程之前知道它是否成功.类似于CallAsync()方法实现的东西.
4)UserB想要触发MyAsync()方法,而不是等待它完成.在这种情况下,UserB在向远程服务器发送消息之前不关心它是否已连接.类似于CallForBackground()方法实现的东西.
因此,对于UserA(等待),MyAsync()方法将尝试一次并返回状态.但对于UserB(不等待),方法将继续尝试.对于这个逻辑,MyAsync()需要知道它是否正在等待.我们如何实现这一目标?
你不应该有async方法返回void.只是不要这样做,除非你确定这是你需要的(但很可能你没有!).
async是实现细节,它允许您使用awaits 更简单,更方便地编写方法体,并使编译器为您准备所有必要的回调等.
你没有办法告诉别人Task你正在做什么.