在不等待的情况下调用异步方法可能会导致潜在的复杂问题。本文探讨了在 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中文网其他相关文章!