我需要從IIS中託管的wcf服務內部進行多個異步調用(可能相關,我不知道)。這些調用是針對其他服務的,但是我通過向服務URL發送一個字符串來創建它們。同步調用它們是可行的,但我有十幾個調用,並且它們是完全獨立的,所以我想通過異步調用它們來加速它們。等待多個異步POST請求
現在,我意識到我可以簡單地使用多線程 - 這可能是最簡單的解決方案 - 但我想我會嘗試異步。
我的代碼是與此類似:
public delegate void Callback(string response);
public static void InvokeAsync(string request, string url, Callback callback)
where TResponse: class
{
var web = new WebClient();
web.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
web.UploadStringCompleted += (sender, e) => callback.Invoke(e.Result);
web.UploadStringAsync(new Uri(url), request);
}
//...
var lockObj = new object();
foreach (var item in list)
InvokeAsync(item, url, response => { lock(lockObj) newList.Add(response); });
以上應該工作,我相信;然而,我的問題是,我不知道如何等待所有的回覆。如果我使用計數器並等待一個循環,直到它變爲零,則不會有任何CPU處理回調。我相信,同樣使用某種形式的信號量。有沒有一種非阻塞的方式來等待我收回所有的迴應? (改變方法的簽名也需要一個回調只會移動問題的一個層面了,我害怕。)
[編輯]這是一個非常接近的問題 - How to invoke async operation as sync? - 但我需要等待多個異步操作。
謝謝!我喜歡這個網站。 – 2010-11-12 16:25:00
不客氣。 – 2010-11-12 16:26:54