Pas*_*cal 19 c# task-parallel-library async-await asp.net-web-api taskcompletionsource
有关功能和含义的区别是什么
TaskCompletionSource + SetResult vs Task + 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);
}
Run Code Online (Sandbox Code Playgroud)
Dar*_*ler 35
Task.FromResult是.NET 4.5中的新增功能.它是一个帮助方法,它创建一个TaskCompletionSource并调用SetResult.如果您使用的是.NET 4或更早版本,则必须使用SetResult.
如果您只想返回一个Task<TResult>
有结果的完成(或一个Task
没有结果的完成),只需使用Task.FromResult
.
Task.FromResult
是一个简单的工具来创建一个完成的任务的结果。TaskCompletionSource
是一个更强大的工具,支持一切。您可以设置异常,返回未完成的任务并稍后设置其结果等等
PS:似乎您试图通过返回已完成的任务来“伪造”异步方法。尽管这是最好的方法,但请确保“伪造”异步确实是您想要完成的。
归档时间: |
|
查看次数: |
5051 次 |
最近记录: |