return await
vs. 直接返回 Task:await
在 using
块中的重要性
虽然从异步方法直接返回一个 Task 与使用 return await
在功能上等效,但在用 using
块包装方法时,两者之间存在细微但重要的区别。
考虑以下两种相同方法的版本:
<code class="language-csharp">Task<TResult> DoSomethingAsync() { using (var foo = new Foo()) { return foo.DoAnotherThingAsync(); } } async Task<TResult> DoSomethingAsync() { using (var foo = new Foo()) { return await foo.DoAnotherThingAsync(); } }</code>
在第一种方法中,直接返回 Task 时,using
块会在 DoAnotherThingAsync
方法将控制权返回给调用代码后立即释放 Foo
对象。但是,DoAnotherThingAsync
方法可能尚未完成,这可能导致潜在的错误。
相反,当使用 return await
时,控制流会在继续执行之前等待 DoAnotherThingAsync
完成。这确保了 using
块仅在异步操作完全执行后才释放 Foo
对象。因此,第二种方法将正常工作,而第一种方法可能会出现释放问题。
以上是'返回等待”与直接返回任务:为什么``等待``使用''块?的详细内容。更多信息请关注PHP中文网其他相关文章!