在异步方法结束时,我应该返回还是等待?在任务返回异步方法结束时,如果我调用另一个异步方法,我可以使用await它或return它的任务。每个的后果是什么? Task FooAsync()
{
return BazAsync(); // Option A
}
async Task BarAsync()
{
await BazAsync(); // Option B
}
2 回答
慕桂英4014372
TA贡献1871条经验 获得超13个赞
如果声明方法本身,则无法返回任务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();}
- 2 回答
- 0 关注
- 456 浏览
添加回答
举报
0/150
提交
取消