【发布时间】:2020-02-02 06:23:25
【问题描述】:
在下面的代码中,Wait()方法永远不会抛出任务取消引起的异常,并且永远不会将控制权返回给调用线程。
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http://stackoverflow.com")
{
Content = new ObjectContent<Foo>(new Foo(), new JsonMediaTypeFormatter())
};
CancellationTokenSource cts = new CancellationTokenSource();
HttpClient client = new HttpClient();
Task task = client.SendAsync(request, cts.Token);
cts.Cancel();
task.Wait();
但是当 request.Content 是带有序列化 Foo 对象的 StringContent 时,会抛出异常。我的期望是所有 HttpContent 类型都会引发异常。
为什么不抛出异常?
创建 StringContent 的解决方法不好。也许 是否存在其他解决方法?
【问题讨论】:
-
您到底遇到了什么异常?请张贴详细信息。为什么你会在拨打电话后立即拨打取消电话?
-
我的期望:Wait() 方法必须在 InnerException 属性中抛出带有 TaskCancelledException 的 AggregateException。 Cancel() 可以在任何时候被调用,包括在创建任务之后。
-
你能用
var result = task.Result;替换task.Wait();并检查结果吗?很想知道通话是否真的成功完成。 (我认为这是出于说明目的,所以我将不讨论与await异步执行此操作的讲座:) -
Wait() 永远不会将控制权返回给调用线程。将此添加到我的问题中,谢谢您的评论。是的,这是为了说明目的:)
标签: c# .net dotnet-httpclient