在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中文網其他相關文章!