在c#
中理解异步/等待僵局现代编程在很大程度上依赖于异步操作,而C#'s async
/await
关键字提供了一种简化的方法。 但是,使用不当会导致僵局。让我们检查一个常见的情况:
考虑此示例:
<code class="language-csharp">public ActionResult ActionAsync() { // DEADLOCK: Blocking on the async task var data = GetDataAsync().Result; return View(data); } private async Task<string> GetDataAsync() { // Simple asynchronous method var result = await MyWebService.GetDataAsync(); return result.ToString(); }</code>
此代码尝试异步地检索数据,但同步等待使用.Result
的结果,创建僵局。 僵局出现如下:
ActionAsync
>调用GetDataAsync
。GetDataAsync
>通过MyWebService.GetDataAsync
。
MyWebService.GetDataAsync
在
GetDataAsync
的任务,停止上下文线程。ActionAsync
ActionAsync
。
GetDataAsync
GetDataAsync
阻止
GetDataAsync
,等待阻塞的上下文线程。
ActionAsync
以上是异步/等待如何导致C#僵局?的详细内容。更多信息请关注PHP中文网其他相关文章!