首頁 > 後端開發 > C++ > 如何從C#中的同步方法調用異步方法?

如何從C#中的同步方法調用異步方法?

Susan Sarandon
發布: 2025-02-02 12:41:13
原創
935 人瀏覽過

How Can I Call Asynchronous Methods from Synchronous Methods in C#?

在C#中同步方法調用異步方法

在同步代碼中調用異步方法(通常用async修飾符標識)是一個常見的開發難題。異步編程能夠在保持UI響應性的同時執行長時間運行的操作,但這通常需要調整代碼結構,而這可能與現有的同步方法不符。

方案一:Task.WaitAndUnwrapException

如果異步方法(MyAsyncMethod)可以獨立運行,無需上下文同步,則可以使用Task.WaitAndUnwrapException提供一個簡單的解決方案:

<code class="language-csharp">var task = MyAsyncMethod();
var result = task.WaitAndUnwrapException();</code>
登入後複製

但是,使用Task.Wait或Task.Result時需要注意,它們會將異常包裝在AggregateException中。

方案二:AsyncContext.RunTask

或者,如果MyAsyncMethod需要上下文同步,AsyncContext.RunTask提供了一種嵌套上下文的方法:

<code class="language-csharp">var result = AsyncContext.RunTask(MyAsyncMethod).Result;</code>
登入後複製

方案三:Task.Run

在某些情況下,AsyncContext.RunTask可能會受到限制,例如依賴於UI事件的異步方法。在這種情況下,可以在線程池上執行異步方法:

<code class="language-csharp">var task = Task.Run(async () => await MyAsyncMethod());
var result = task.WaitAndUnwrapException();</code>
登入後複製

請注意,此方法要求MyAsyncMethod能夠在線程池上下文中兼容,包括對UI元素更新和ASP.NET請求上下文訪問的限制。

以上是如何從C#中的同步方法調用異步方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板