在异步方法结束时,我应该返回还是等待?

在异步方法结束时,我应该返回还是等待?

在任务返回异步方法结束时,如果我调用另一个异步方法,我可以使用await它或return它的任务。每个的后果是什么?

    Task FooAsync()
    {
        return BazAsync();  // Option A
    }

    async Task BarAsync()
    {
        await BazAsync(); // Option B
    }


婷婷同学_
浏览 457回答 2
2回答

慕桂英4014372

如果声明方法本身,则无法返回任务async- 因此这不起作用,例如:async&nbsp;Task&nbsp;BarAsync(){ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;BazAsync();&nbsp;//&nbsp;Invalid!}那将需要返回类型Task<Task>。如果你的方法只是做了少量的工作,然后只调用一个异步方法,那么你的第一个选项很好,这意味着涉及的任务少了一个。您应该知道,同步方法中抛出的任何异常都将同步传递 - 实际上,这是我更喜欢处理参数验证的方式。它也是实现重载的常见模式,例如通过取消令牌。请注意,如果您需要更改为等待其他内容,则需要将其设置为异步方法。例如://&nbsp;Version&nbsp;1:Task&nbsp;BarAsync(){ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;No&nbsp;need&nbsp;to&nbsp;gronkle&nbsp;yet... &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;BazAsync();}//&nbsp;Oops,&nbsp;for&nbsp;version&nbsp;2&nbsp;I&nbsp;need&nbsp;to&nbsp;do&nbsp;some&nbsp;more&nbsp;work...async&nbsp;Task&nbsp;BarAsync(){ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;gronkle&nbsp;=&nbsp;await&nbsp;GronkleAsync(); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Do&nbsp;something&nbsp;with&nbsp;gronkle &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Now&nbsp;we&nbsp;have&nbsp;to&nbsp;await&nbsp;BazAsync&nbsp;as&nbsp;we're&nbsp;now&nbsp;in&nbsp;an&nbsp;async&nbsp;method &nbsp;&nbsp;&nbsp;&nbsp;await&nbsp;BazAsync();}
打开App,查看更多内容
随时随地看视频慕课网APP