【发布时间】:2018-12-21 17:56:27
【问题描述】:
这是我演示问题的非常简单的课程:
public class SimpleHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return new Task<HttpResponseMessage>(
() => new HttpResponseMessage(HttpStatusCode.Unauthorized));
//return base.SendAsync(request, cancellationToken);
}
}
预期的行为是 401 响应。如果我调试它,执行到达返回语句并在我按 F5 时继续执行,但 http 请求永远不会返回,并且 http 客户端最终会等到超时。
我真的很困惑,因为我正在做编译器告诉我的事情:返回 Task<HttpResponseMessage>。对 base.SendAsync 的调用工作得很好。我在这里错过了什么?
编辑:
好的,所以我发现了
return Task.FromResult(new HttpResponseMessage(HttpStatusCode.Unauthorized));
按预期工作。但是,我想了解为什么上述方法失败了?在这两种情况下,我都在创建 Task<HttpResponseMessage> 为什么我只在第二种情况下获得预期的行为?
【问题讨论】:
标签: c# asp.net asp.net-web-api2 task-parallel-library