正在等待如何知道我的异步方法?

Gig*_*hew 0 c# async-await

是否可以知道我的方法是否使用'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()需要知道它是否正在等待.我们如何实现这一目标?

Mar*_*zek 6

  1. 你不应该有async方法返回void.只是不要这样做,除非你确定这是你需要的(但很可能你没有!).

  2. async是实现细节,它允许您使用awaits 更简单,更方便地编写方法体,并使编译器为您准备所有必要的回调等.

  3. 你没有办法告诉别人Task你正在做什么.