およびデッドロックの原因awaitC#で非同期操作を使用する場合、混合同期と非同期呼び出しの潜在的なトラップを理解することが重要です。この例では、次のコードラインのため、最後のテストは死んだロックのためにハングします:.Result
<code class="language-csharp">Assert.IsTrue(CheckStatus().Result); // 导致挂起</code>
は、ブール型タスクを返す非同期方法です。 タスクを呼び出すと、タスクが完了するまで現在のスレッドをブロックしようとします。
CheckStatus()
これはデッドロックにつながります:非同期方法はメインスレッドで実行を継続しようとしており、メインスレッドはタスクが完了するのを待っています。 Result
解決策:死んだロックを避けてください直接電話をかけることは避けてください
ベストプラクティスとして、タスクで直接またはawait
を使用しないようにしてください。代わりに、非同期操作が非ブロッキングで実行されることを確認するために、モードに依存します。
結論await
<code class="language-csharp">[Test] public async Task CheckStatusTwiceResultTest() { Assert.IsTrue(await CheckStatus()); Assert.IsTrue(await CheckStatus()); }</code>同期と非同期呼び出しの混合の潜在的な結果を理解することにより、開発者は、死んだロックやパフォーマンスの問題に遭遇することなく、C#で非同期方法を効果的に使用できます。
以上がC#Async操作で「待ち望まれている」と「.Result」を混ぜると、なぜデッドロックを引き起こすのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。