質問

この問題に関する。純IAsyncResultデザインパターンとの必要性を呼び出し EndInvoke とした この 質問

背景

しているのか教えてくださいコードを私が焼き切る多くの非同期通話、特定の機能を待ってこれらすべての通話を終了を使用する前に EndInvoke() を取り戻すべての結果を

質問1

かどうかはわかりませんの話を検出した例外で呼びかけ EndInvoke() ベ例外が発生したのは全体のメソッドは失敗する例外がに包まれ、APIの特定の例外をスローされ上がります。

私の最初の質問は、何が最良の方法その他の非同期通話の取得を適切に切断されますか。

finally ブロックを呼びかけ EndInvoke() の残りの素線が呼び出しは無視さを除く)のうるのか?

質問2

第二に初めて火を切っasyc電話として通話 WaitHandle.WaitAll() の配列 WaitHandle インスタンスがしっか IAsyncResult う場合がございます。の方法で焼成すべてのこれらの非同期通話にはタイムアウトに従い提供するの WaitAll() 方法。しているかどうかを試験すべての通話を完了しない場合にはそのタイムアウトが必要に達していく方法にもなるような別のAPIの特定の例外です。

その後、私の第二の質問はどうしたらよいかるでしょうか?

私は電話をする必要があり EndInvoke() 解除はこれらすべての非同期通話しによると、エラーが同時に私たいと思っているコードによって EndInvoke() は遮断する理論的には以上の場合 WaitAll() 電話回はそのうちにすべての非同期通話は自分とは正の例外がスローされ(このように電話)からもよりタイムアウトがこのタイムアウトが潜在的に異なるからタイムアウト

役に立ちましたか?

解決

私が繰り返し処理を実行して IAsyncResult ブラッピング各 EndInvoke try/catchを格納する為発生する例外。そして、きっとすべての EndInvokesんだ格納されず、例外的に投APIる場合の例外です。のようなもの:

var exs = new List<Exception>();

foreach (IAsyncResult iasr in asyncResults) {
    try {
        iasr.EndInvoke();
    }
    catch (Exception e) {
        exs.Add(e);
    }
}

if (exs.Count > 0) {
    throw new MyException(exs.ToReadOnly());
}

他のヒント

私の使用をお勧めしの代わりに作業をすIAsyncResultします。いすぐに"継続"セマンティクス、ラップ、IAsyncResult API呼び出しEndInvoke適です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top