async/async/await deadlocks in 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
を介して非同期Webリクエストを開始します
MyWebService.GetDataAsync
MyWebService.GetDataAsync
GetDataAsync
に戻ります
ActionAsync
ActionAsync
GetDataAsync
Webリクエストは最終的に完了し、GetDataAsync
GetDataAsync
ActionAsync
を待ちます。これは、ブロックされたコンテキストスレッドを待ちます。
以上がAsync/待ち行列がC#のデッドロックにつながるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。