同步呼叫非同步方法
假設有一個非同步方法,例如GenerateCodeAsync()
,它會傳回一個任務。要同步呼叫此方法,需要找到一種方法來協調同步和非同步程式碼。
一種解決方案是在線程池線程中運行非同步方法,並使用awaiter
阻塞線程,直到操作完成:
string code = Task.Run(() => GenerateCodeAsync()).GetAwaiter().GetResult();
直接使用.Result的缺點
直接存取Result
屬性可能導致:
Result
的呼叫阻塞主線程,阻止非同步程式碼執行。 AggregateException
中。 為了避免這些問題,GetAwaiter().GetResult()
方法:
以上是如何在 C# 中同步呼叫非同步方法而不出現死鎖?的詳細內容。更多資訊請關注PHP中文網其他相關文章!