首頁 > 後端開發 > C++ > 如何同步稱異步C#方法?

如何同步稱異步C#方法?

Mary-Kate Olsen
發布: 2025-02-02 13:01:09
原創
455 人瀏覽過

How Can I Call Asynchronous C# Methods Synchronously?

>同步執行異步C#方法

>通常稱為public async Task Foo()>的異步方法對於並發操作和增強的用戶體驗至關重要。 但是,將它們集成到現有的同步代碼庫中需要仔細考慮。 讓我們檢查幾種方法。

>

>方法1:Task.WaitAndUnwrapException

對於不依賴上下文同步(例如,使用

)的直接異步方法, ConfigureAwait(false) Task.WaitAndUnwrapException這個整潔的處理異常,而沒有額外的

層。 但是,如果
<code class="language-csharp">var task = MyAsyncMethod();
var result = task.WaitAndUnwrapException();</code>
登入後複製
需要上下文同步,則此方法是不合適的。

> AggregateException方法2:MyAsyncMethod

當上下文同步必不可少時,

提供了嵌套上下文:> AsyncContext.RunTask

這有效地阻止了阻止不使用

>的任務的僵局。 AsyncContext.RunTask>方法3:

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

>如果ConfigureAwait(false)不適合(例如,當異步方法等待UI事件時),請將異步方法從線程池中卸載:>

這種方法要求Task.Run是線程安全,並且不依賴於UI元素或ASP.NET請求上下文。 另外,使用方法1使用

提供可行的替代方案。

> AsyncContext.RunTask進一步閱讀

<code class="language-csharp">var task = Task.Run(async () => await MyAsyncMethod());
var result = task.WaitAndUnwrapException();</code>
登入後複製
要深入了解,請諮詢Stephen Cleary的《 2015年MSDN》文章“異步編程-Brownfield Async Development”。

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

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