我想消耗服務引用,同時使用任務調度程序進行多個請求。該服務包含一個同步和一個返回結果集的異步函數。我有點困惑,我有幾個最初的問題,然後我會分享我在每個問題上有多遠。我正在使用一些日誌記錄,併發可視化工具和提琴手進行調查。最終,我希望使用反應式調度程序儘可能多地提出請求。任務調度程序與WCF服務參考異步功能
1)我應該使用異步函數來完成所有請求嗎?
2)如果我要在多任務中使用同步函數,那麼有限的資源可能會導致我的線程數量不足。
這是我到目前爲止有:
var myScheduler = new myScheduler();
var myFactory = new Factory(myScheduler);
var myClientProxy = new ClientProxy();
var tasks = new List<Task<Response>>();
foreach(var request in Requests)
{
var localrequest = request;
tasks.Add(myFactory.StartNew(() =>
{
// log stuff
return client.GetResponsesAsync(localTransaction.Request);
// log some more stuff
}).Unwrap());
}
Task.WaitAll(tasks.ToArray());
// process all the requests after they are done
此運行,但根據提琴手它只是試圖做所有的請求的一次。它可能是調度程序,但我相信我會做更多的事情。
我也嘗試過在沒有unwrap命令的情況下實現它,而是使用異步await委託並且它做同樣的事情。我也嘗試引用.result,並且似乎是按順序執行的。對調度程序/工廠使用非同步服務函數調用時,每個客戶端同時只能同時獲得約20個併發請求。
您希望它做什麼而不是一次性發出所有請求? – i3arnon
@ i3arnon - 感謝您的迴應!我有成千上萬的請求。該服務只能根據當前負載處理很多事務。我不是唯一的客戶。我想使用自定義調度程序來根據服務響應時間調整併發請求的數量。 – Ashtonian
使用信號量可以更好地完成。請參閱[我的答案](http://stackoverflow.com/a/24874095/885318) – i3arnon