在不等待的情況下呼叫非同步方法可能會導致潛在的複雜問題。本文探討了在 C# 中不等待結果的情況下安全地呼叫非同步方法的解決方案。
在給定的場景中,從傳回資料的 GetStringData 方法呼叫非同步方法 MyAsyncMethod。不等待會產生警告並抑制異常。為了解決這個問題,同時避免等待調用,請考慮以下方法:
使用 ContinueWith 處理異常:
<code class="language-csharp">MyAsyncMethod().ContinueWith(t => Console.WriteLine(t.Exception), TaskContinuationOptions.OnlyOnFaulted);</code>
此方法允許在單獨的執行緒上處理異常。它不需要在呼叫線程上等待 MyAsyncMethod,但提供了一個處理可能出現的任何異常的機制。
使用 ConfigureAwait(false) 的 Try-Catch 區塊:
<code class="language-csharp">try { MyAsyncMethod().ConfigureAwait(false); // 注意:这里去掉了 await } catch (Exception ex) { Trace.WriteLine(ex); }</code>
此方法利用 ConfigureAwait(false) 選項來抑制非同步呼叫產生的警告。它允許使用 try-catch 區塊來明確處理異常。 關鍵區別在於,我們不再 await
MyAsyncMethod,而是直接呼叫 ConfigureAwait(false)
來避免上下文切換。
附加說明:
在 Web 請求的上下文中(例如在 ASP.NET Web API 中),避免等待非同步呼叫至關重要。這是因為等待會延遲對請求的回應,可能會增加回應時間。提供的解決方案允許非同步調用,而不會妨礙請求處理速度。
以上是如何在不等待的情況下安全地呼叫C#非同步方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!