Potrzebuję wykonać wiele asynchronicznych wywołań z wnętrza usługi wcf hostowanej w IIS (może być istotne, nie wiem). Połączenia są do innych usług, ale robię je przez napisanie napisu na adres URL usługi. Dzielenie się nimi synchronicznie działa, ale mam więcej niż tuzin połączeń i są one całkowicie niezależne, więc chciałbym je przyspieszyć, nazywając je asynchronicznie.Oczekiwanie na wiele asynchronicznych żądań POST
Teraz zdaję sobie sprawę, że mogę po prostu użyć wielu wątków - i to może być najłatwiejsze rozwiązanie - ale pomyślałem, że spróbuję.
Mój kod jest podobny do tego:
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); });
Powyższe powinno działać, wierzę; jednak moim problemem jest to, że nie mam pojęcia, jak poczekać, aż wszystkie odpowiedzi wróci. Jeśli używam licznika i czekam w pętli, aż stanie się zero, nie będzie żadnego procesora do obsługi wywołań zwrotnych. Podobnie, jak sądzę, używając pewnej formy semaforu. Czy istnieje nieblokujący sposób czekania, aż otrzymam wszystkie odpowiedzi? (Zmiana podpis metody, aby również wziąć zwrotnego ruszy tylko problem o jeden poziom wyżej, boję).
[Edytuj] Oto bardzo blisko pytanie - How to invoke async operation as sync? - ale muszę czekać na wielokrotności asynchronicznym operacje.
Dziękujemy! Kocham tę stronę. –
Nie ma za co. –