【发布时间】:2015-03-21 06:15:49
【问题描述】:
当有一个或两个任务时它可以正常工作,但是当我们列出多个任务时会抛出错误“任务已取消”。
List<Task> allTasks = new List<Task>();
allTasks.Add(....);
allTasks.Add(....);
Task.WaitAll(allTasks.ToArray(), configuration.CancellationToken);
private static Task<T> HttpClientSendAsync<T>(string url, object data, HttpMethod method, string contentType, CancellationToken token)
{
HttpRequestMessage httpRequestMessage = new HttpRequestMessage(method, url);
HttpClient httpClient = new HttpClient();
httpClient.Timeout = new TimeSpan(Constants.TimeOut);
if (data != null)
{
byte[] byteArray = Encoding.ASCII.GetBytes(Helper.ToJSON(data));
MemoryStream memoryStream = new MemoryStream(byteArray);
httpRequestMessage.Content = new StringContent(new StreamReader(memoryStream).ReadToEnd(), Encoding.UTF8, contentType);
}
return httpClient.SendAsync(httpRequestMessage).ContinueWith(task =>
{
var response = task.Result;
return response.Content.ReadAsStringAsync().ContinueWith(stringTask =>
{
var json = stringTask.Result;
return Helper.FromJSON<T>(json);
});
}).Unwrap();
}
【问题讨论】:
-
内部异常说明了什么?
-
为什么要把
CancellationToken作为参数而不使用呢? -
我的原因是错误地处理了
HttpClient,例如async Task<HttpResponseMessage> Method(){ using(var client = new HttpClient()) return client.GetAsync(request); } -
对于那些使用
HttpClient像@JobaDiniz(带有using())的人,请停止!原因:aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong -
这是微软对
HttpClient的最新推荐:docs.microsoft.com/en-us/dotnet/architecture/microservices/…
标签: c# task-parallel-library dotnet-httpclient