異步方法:return await
與直接返回 Task<T>
的比較——何時需要 await
?
在異步編程中,您可以編寫返回 Task<T>
的方法,方法是使用 return await
的異步方法,或者直接返回 Task<T>
對象的普通方法。雖然大多數情況下這兩種方法在功能上是等效的,但在某些特定場景中,使用 return await
的異步方法是必要的。
一個關鍵的區別在於在帶有 using
語句的 try
塊中使用這些方法時。考慮以下兩種方法:
<code class="language-csharp">Task<someresult> DoSomethingAsync() { using (var foo = new Foo()) { return foo.DoAnotherThingAsync(); } } async Task<someresult> DoSomethingAsync() { using (var foo = new Foo()) { return await foo.DoAnotherThingAsync(); } }</code>
在第一種方法中,Foo
對象會在 DoAnotherThingAsync()
返回後立即被釋放。但是,這可能發生在 DoAnotherThingAsync()
實際完成之前很久。因此,由於過早釋放 Foo
,第一種版本可能存在錯誤。
相反,第二種使用 await
的方法確保只有在 DoAnotherThingAsync()
完成其任務後才釋放 Foo
對象。這提供了預期的行為。
因此,當您需要確保在涉及實現 IDisposable
或類似接口的對象的異步操作中正確釋放或管理某些資源時,務必使用帶有 return await
的異步方法。
以上是異步方法:'返回等待”與直接返回``任務' - 何時需要`'的詳細內容。更多資訊請關注PHP中文網其他相關文章!