6

私は非同期呼び出しを行うライブラリを使用しています。応答が返されると、結果とともにコールバック メソッドが呼び出されます。これは従うべき単純なパターンですが、私は今障害にぶつかっています。非同期メソッドを複数回呼び出して (ブロックせずに) 待機するにはどうすればよいですか? すべてのサービスからデータを取得したら、非同期メソッドによって返される 2 つ (またはそれ以上) の値を取得する独自のコールバック メソッドを呼び出したいと思います。

ここに従うべき正しいパターンは何ですか? ところで、ライブラリを変更して TPL などを使用することはできません... 私はそれと一緒に暮らす必要があります。

public static void GetDataAsync(Action<int, int> callback)
{
    Service.Instance.GetData(r1 =>
    {
        Debug.Assert(r1.Success);
    });

    Service.Instance.GetData2(r2 =>
    {
        Debug.Assert(r2.Success);
    });

    // How do I call the action "callback" without blocking when the two methods have finished to execute?
    // callback(r1.Data, r2.Data);
}
4

2 に答える 2

2

Interlocked.Increment非同期呼び出しごとに使用できます。完了したら、呼び出しInterlocked.Decrementてゼロを確認します。ゼロの場合は、独自のコールバックを呼び出します。r1とr2をコールバックデリゲートの外部に保存する必要があります。

于 2012-05-31T02:18:53.440 に答える