同步執行非同步方法
C# 中的非同步程式設計提供了一種有效的方法來處理長時間運行的操作,而無需凍結主應用程式執行緒。 但是,可能會出現需要從同步上下文同步呼叫非同步方法的情況。
解:使用Task.Run
為了實現非同步方法的同步執行,Task.Run
方法提供了一個實用的解決方案。 它將非同步操作卸載到線程池線程,允許呼叫線程等待完成:
<code class="language-csharp">string code = Task.Run(() => GenerateCodeAsync()).GetAwaiter().GetResult();</code>
為什麼要避免直接使用.Result
?
雖然存取任務的 Result
屬性看起來很簡單,但它有兩個潛在風險:
.Result
可能會導致死鎖。 Task.Run
透過在單獨的執行緒上執行非同步操作來減輕這種風險。 .Result
屬性將來自非同步方法的異常包裝在 AggregateException
中。 使用 .GetAwaiter().GetResult()
透過展開異常來避免這種情況,簡化錯誤處理。 總結
將 Task.Run
與其等待程式結合使用,可以提供一種可靠且高效的方法,用於在同步程式碼中同步呼叫非同步方法。此方法避免了潛在的死鎖並簡化了異常管理。
以上是如何在C#中同步呼叫非同步方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!