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