什么是关于区别的功能和意义任务FromResult VS TaskCompletionSource的setResult
TaskCompletionSource +的setResult VS任务+ FromResult
在SendAsync方法?
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request.RequestUri.Scheme != Uri.UriSchemeHttps)
{
var response = new HttpResponseMessage(HttpStatusCode.Forbidden) {ReasonPhrase = "HTTPS Required"};
var taskCompletionSource = new TaskCompletionSource<HttpResponseMessage>();
taskCompletionSource.SetResult(response);
return taskCompletionSource.Task;
}
return base.SendAsync(request, cancellationToken);
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (!request.RequestUri.Scheme.Equals(Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase))
{
HttpResponseMessage reply = request.CreateErrorResponse(HttpStatusCode.BadRequest, "HTTPS is required for security reason.");
return Task.FromResult(reply);
}
return base.SendAsync(request, cancellationToken);
}
你提到“.NET 4.5中的新增功能”使它成为我没有人提及的解决方案。 – Pascal
'Task.FromResult'不使用TaskCompletionSource。 'Task.FromResult'调用_Special内部构造函数来创建一个已经完成的task_。 [源代码评论](http://referencesource.microsoft.com/#mscorlib/system/threading/Tasks/Task.cs,11a386e7d7cae64a)。 – Fabio
@Fabio谢谢澄清。我可能看到了一些来自MS的shim代码,它伪造了向后兼容的方法,并假定它是如何工作的。 –