我使用一个httpclient发出约20个http get请求,这个httpclient寿命很长,这意味着它没有打包到using语句中。由于Web服务通常非常快(响应时间约为200毫秒),因此我将超时设置为5秒。
现在我遇到了问题,如果一个请求遇到超时,所有其他请求都将被取消。这是正常行为吗?
这是我用来进行一致调用的代码
public async Task GetAll()
{
await Task.WhenAll(x => x.Select(xx => GetData(xx.Id));
}
调用api的代码:
public async Task GetData(int id)
{
string payload = "";
try
{
var resp = await base.GetAsync($"/apis/v2/getdata/{id}");
if (!resp.IsSuccessStatusCode)
Console.WriteLine("Error");
payload = await resp.Content.ReadAsStringAsync();
Console.WriteLine(payload);
}
catch (System.Exception ex)
{
Console.WriteLine("Error");
}
}
我的基本HttpClient类
public class MyHttpClient : System.Net.Http.HttpClient
{
public Logger Log { get; set; }
}
如果我按顺序运行任务,那么一切正常,但是当我并行运行它们并且一个任务运行超时时,所有其他未完成的任务将被取消。
答案 0 :(得分:1)
如果提供的任何任务以故障状态完成,则返回的任务也将以“故障”状态完成,其中其异常将包含每个提供的任务中未包装的异常集的集合。