私はこれに対してMicrosoftのReactive Framework(Rx)を使用します。
私はあなたが作業しているメソッドのシグネチャが、これらがあると仮定しますと起動するには:
public async Task<bool> WebService1()
public async Task<bool> WebService2()
public async Task<bool> WebService3()
public async Task<bool> WebService4()
public void PostProcessing()
今、あなたはこのように、この使用に受信を設定することができます。
var webservices = new Func<Task<bool>>[]
{
WebService1, WebService2, WebService3, WebService4,
};
IObservable<bool> query =
webservices
.ToObservable()
.SelectMany(ws => Observable.FromAsync(ws))
.Where(b => b == true)
.Take(1);
IDisposable subscription = query.Subscribe(b => PostProcessing());
この正常に4つのWeb非同期サービス(Observable.FromAsync(ws)
)をすべて非同期に.ToObservable().SelectMany(...)
と呼び出し、結果をフィルタリングしてtrue
(.Where(b => b == true)
)にのみフィルタリングします。最終的には1つの結果しか得られません.Take(1)
。
次に、1つの結果(true
である必要があります)が発生した場合は、PostProcessing
を呼び出します。
Webサービスが返される前に中止する必要がある場合は、いつでもsubscription.Dispose()
に電話することができます。
シンプルです。
'タスクを。いつ誰もがすぐに気になるが、それは "1つが本当に戻る"という部分を考慮に入れておらず、他の仕事を停止しない。これはXY問題になる可能性があります。解決しようとしている実際の問題を記述することはできますか? – BradleyDotNET
4人すべてが 'false'を返すとどうなりますか? – Enigmativity
こんにちはEnigmativity、私は今質問を更新しました。ありがとう。 –