這裏是設置:有一個聯邦遠程服務返回一個特定的值是否正確或不正確。我們可以根據需要發送請求,最多可以向遠程服務發送50個請求。由於我們只需要使用正確的值,並且可能的值集合很小(〜700),所以我們可以發送15個左右的批量請求50,並且正確的值將成爲結果集的一部分。因此,我用下面的代碼:如何才能最快地獲得第一個異步響應(並且不執行其餘部分)?
Observable
.Range(0, requests.Count)
.Select(i => Observable.FromAsync(async() =>
{
responses.Add(await client.FederalService.VerifyAsync(requests[i]));
Console.Write(".");
}))
.Merge(8)
.Wait();
可是 - 我不喜歡這個,如果早些時候提出的一個具有正確的價值,我仍然可以通過服務運行做好一切準備浪費時間。我試圖儘可能快地運行。我知道退出條件(響應代碼是1到99,50-59內的任何響應代碼表示該值是「正確的」)。
有沒有辦法讓這段代碼更聰明一點,所以我們儘量減少請求的數量?不幸的是,我們正在驗證的價值是均勻分佈的,所以對請求進行排序不會產生任何效果(我知道這一點)。
Observable是否有'WhenAny'實現? – stuartd
使用System.Reactive,我不確定。我沒有看到可用於該代碼的方法。 – djbyter