非同期 void メソッドでの例外の処理
Microsoft の .NET Async CTP では、例外をスローするときの非同期メソッドの動作が異なります。非同期 Task または非同期 Task
例外をキャッチ
非同期 void メソッドによってスローされた例外をキャッチするには、メソッド呼び出しを明示的に待つか、Wait() メソッドを使用する必要があります。
メソッド呼び出しを待機しています:
<code class="language-csharp"> public async Task Foo() { var x = await DoSomethingAsync(); } public async void DoFoo() { try { await Foo(); } catch (ProtocolException ex) { // 由于在异步方法中等待了调用,因此将捕获异常。 } }</code>
Wait() メソッドを使用します:
<code class="language-csharp"> public void DoFoo() { try { Foo().Wait(); } catch (ProtocolException ex) { // 由于等待了调用的完成,因此将捕获异常。 } }</code>
エラー処理セマンティクス
Stephen Cleary 氏が指摘したように、非同期 void メソッドには異なるエラー処理セマンティクスがあります。
「非同期 void メソッドが例外をスローすると、その例外は非同期 void メソッドの開始時にアクティブだった SynchronizationContext で直接発生します。」
その他の指示
以上がC# で非同期 Void メソッドからの例外をキャッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。