私はこれを行うためにHttpClientを使用しています。 私はURLをループしていますし、foreach URl私は要求を行うために新しいタスクを開始します。ループの後に私はすべてのタスクが終了するまで待つ。 しかし、私はファイトラーで行われている呼び出しをチェックするとき、私は要求が同期的に呼び出されていることがわかります。それは要求の束が作られているのと同じではなく、一つずつあります。 私は解決策を探して、他の人もこれを経験したが、UWPでは経験していないことを発見しました。ソリューションはServicePointManagerのDefaultConnectionLimitを増やすことでした。 問題は、ServicePointManagerがUWPに対して存在しないことです。私は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;
}
私は仕事で非同期/のawaitを使用していないなぜあなたは不思議に思うかもしれません。私がそれを使うとき、私は結果をかなり早く得る。ただし、問題は、すべてのタスクが完了するまでTask.WhenAllが待機しないことです。私がデバッグすると、私はTask.WhenAllを渡した後も依然として呼び出しが行われています。おそらく問題がそこにあるかもしれません。タスクで非同期/待機を使用してすべてのタスクが完了するまでTask.WhenAllを待つ方法がありますか? –