使用Task.Run同步呼叫非同步方法
非同步程式設計允許我們在不阻塞主執行緒的情況下執行長時間運行的操作。但是,在某些情況下,我們可能需要同步呼叫非同步方法。以下是如何使用Task.Run來實現這一點:
場景:
考慮以下非同步方法:
<code class="language-c#">public async Task<string> GenerateCodeAsync() { string code = await GenerateCodeService.GenerateCodeAsync(); return code; }</code>
假設我們需要從另一個同步方法中同步呼叫此方法。
解:
要同步運行非同步方法,我們可以使用Task.Run方法在一個執行緒池執行緒中執行它:
<code class="language-c#">string code = Task.Run(() => GenerateCodeAsync()).GetAwaiter().GetResult();</code>
此程式碼使用下列步驟:
直接使用.Result的缺點:
直接存取任務的Result屬性(即string code = GenerateCodeAsync().Result;
)的簡單方法應避免,因為它具有以下缺點:
.GetAwaiter().GetResult()
,我們避免了這個問題並直接接收異常。 以上是如何使用Task.Run同步呼叫非同步方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!