在 C# 中避免 await
:安全處理非同步方法呼叫
不使用 await
直接呼叫非同步方法可能會導致編譯器警告和潛在的屏蔽異常。本文探討了在這種情況下呼叫非同步方法的安全替代方案。
解決編譯器警告
忽略編譯器關於缺少 await
的警告是有風險的。 雖然抑制警告看起來很方便,但只有在您絕對確定非同步方法不會引發異常時才建議這樣做。這通常是一個不可靠的假設。
利用 ContinueWith
進行非同步異常處理
ContinueWith
方法提供了一個強大的解決方案。它允許在單獨的線程上進行異常處理,從而防止主線程阻塞。 例:
<code class="language-csharp">MyAsyncMethod().ContinueWith(t => { if (t.IsFaulted) { Console.WriteLine(t.Exception); } }, TaskContinuationOptions.OnlyOnFaulted);</code>
此程式碼可確保非同步擷取並記錄來自 MyAsyncMethod()
的任何異常。
與await
ConfigureAwait(false)
一起僱用
另一種方法是將 await
與 ConfigureAwait(false)
一起使用:
<code class="language-csharp">try { await MyAsyncMethod().ConfigureAwait(false); } catch (Exception ex) { Trace.WriteLine(ex); }</code>
這提供了錯誤處理,而無需與 await
關聯的完整同步等待。 ConfigureAwait(false)
防止在特定同步上下文上安排延續,從而可能提高效能並避免上下文切換問題。
Web 服務最佳實務 (ASP.NET Web API)
在 Web 服務開發(如 ASP.NET Web API)中,等待非同步操作可能會影響回應時間。 上述方法對於在不影響效能的情況下有效處理異常至關重要。 優先考慮非同步異常處理以保持反應能力和可靠性。
以上是如何在不使用'await”的情況下安全地呼叫 C# 中的非同步方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!