HttpClient Task被取消了

时间:2012-10-22 18:54:54

标签: asynchronous task dotnet-httpclient

我正在尝试使用HttpClient使用以下代码将消息异步记录到REST服务:

public void LogMessage(string operationURI, string message, EventLogEntryType logEntryType)
        {
            using (var client = new HttpClient())
            {
                var cancellationToken = new CancellationToken();
                client.SendAsync(GetRequest(operationURI), cancellationToken).ContinueWith(
                    cw =>
                    {
                        var response = cw.Result; //(I get an error on this line)
                        if (!response.IsSuccessStatusCode)
                        {
                            LogMessageLocal(message, logEntryType);
                        }
                    });
            }
        }

注意:GetRequestMessage返回一个HttpRequestMessage。

但我收到一条错误消息,指出“任务已取消。”

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我相信超过超时时会发生这种情况。您可以检查timeout,并在异常之前记录未完成的时间,看是否超出该范围。

答案 1 :(得分:0)

HttpClient在SendAsync完成之前处理。这会导致TaskCanceledException被抛出。

  1. async关键字添加到LogMessage
  2. await关键字添加到SendAsync并将其结果设置为var response
  3. 等待它后,做任何你想做的回应。