在任务返回异步方法结束时,如果我调用另一个异步方法,我可以使用await它或return它的任务.每个的后果是什么?
    Task FooAsync()
    {
        return BazAsync();  // Option A
    }
    async Task BarAsync()
    {
        await BazAsync(); // Option B
    }
Jon*_*eet 33
如果声明方法本身,则无法返回任务async- 因此这不起作用,例如:
async Task BarAsync()
{
    return BazAsync(); // Invalid!
}
那将需要返回类型Task<Task>.
如果你的方法只是做了少量的工作,然后只调用一个异步方法,那么你的第一个选项很好,这意味着涉及的任务少了一个.您应该知道同步方法中抛出的任何异常都将同步传递 - 实际上,这是我更喜欢处理参数验证的方式.
它也是实现重载的常见模式,例如通过取消令牌.
请注意,如果您需要更改为等待其他内容,则需要将其设置为异步方法.例如:
// Version 1:
Task BarAsync()
{
    // No need to gronkle yet...
    return BazAsync();
}
// Oops, for version 2 I need to do some more work...
async Task BarAsync()
{
    int gronkle = await GronkleAsync();
    // Do something with gronkle
    // Now we have to await BazAsync as we're now in an async method
    await BazAsync();
}
| 归档时间: | 
 | 
| 查看次数: | 4538 次 | 
| 最近记录: |