在C#中從同步方法調用異步方法
異步編程在C#開發中越來越流行。有時,您可能會遇到需要從同步上下文中調用異步方法的情況。雖然這通常通過異步方法實現,但這篇文章探討了彌合這一差距的各種方法。
方法一:使用Task.WaitAndUnwrapException
如果您的異步方法很簡單,並且不需要與其上下文同步,您可以利用Task.WaitAndUnwrapException來檢索其結果。此方法會解開異步操作期間可能發生的任何異常。
<code class="language-csharp">var task = MyAsyncMethod(); var result = task.WaitAndUnwrapException();</code>
方法二:使用AsyncContext.RunTask
對於需要上下文同步的方法,您可以使用AsyncContext.RunTask來創建一個嵌套上下文。默認情況下,AsyncContext封裝當前的同步上下文。但是,它可以應用於任何任意上下文。
<code class="language-csharp">var result = AsyncContext.RunTask(MyAsyncMethod).Result;</code>
方法三:使用Task.Run
如果AsyncContext.RunTask不可行,您可以使用Task.Run在單獨的線程上啟動異步操作。此方法允許異步方法繼續執行,而不會阻塞調用線程。
<code class="language-csharp">var task = Task.Run(async () => await MyAsyncMethod()); var result = task.WaitAndUnwrapException();</code>
注意事項
使用這些方法時,請記住以下幾點:
以上是如何從C#中的同步代碼調用異步方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!