我正在創建一個需要todo並行http請求的應用程序,我正在使用HttpClient。 我正在遍歷URL和foreach URl我開始一個新的任務todo請求。循環後,我等待,直到每個任務完成。 但是,當我檢查正在使用提琴手進行的調用時,我發現請求正在被同步調用。這並不像一大堆請求正在制定,而是一個接一個。 我搜索了一個解決方案,發現其他人也經歷過這一點,但與UWP無關。解決方案是增加ServicePointManager上的DefaultConnectionLimit。 問題是,UWP不存在ServicePointManager。我查看過API,我想我可以在HttpClientHandler上設置DefaultConnectionLimit,但是沒有。在UWP應用程序中的並行httprequest
所以我有幾個問題。 DefaultConnectionLimit仍然是一個可以在某處設置的屬性? 如果是這樣,我在哪裏設置?如果不是,我該如何增加連接限制? UWP中還有一個連接限制嗎?
這是我的代碼:
var requests = new List<Task>();
var client = GetHttpClient();
foreach (var show in shows)
{
requests.Add(Task.Factory.StartNew((x) =>
{
((Show)x).NextEpisode = GetEpisodeAsync(((Show)x).NextEpisodeUri, client).Result;}, show));
}
}
await Task.WhenAll(requests.ToArray());
,這是請求:
public async Task<Episode> GetEpisodeAsync(string nextEpisodeUri, HttpClient client)
{
try
{
if (String.IsNullOrWhiteSpace(nextEpisodeUri)) return null;
HttpResponseMessage content; = await client.GetAsync(nextEpisodeUri);
if (content.IsSuccessStatusCode)
{
return JsonConvert.DeserializeObject<EpisodeWrapper>(await content.Content.ReadAsStringAsync()).Episode;
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
return null;
}
你可能想知道爲什麼我不使用異步/地等待着任務。當我使用它時,我的結果非常快。但問題在於Task.WhenAll不會等到所有任務完成。當我調試時,我仍然看到通過Task.WhenAll後進行的調用。也許問題出在那裏。有沒有辦法讓Task.WhenAll等待,直到所有的任務完成使用異步/等待任務? –