을 SetResult작업 FromResult 차이 <strong>가</strong>이의 기능과 의미에 관한 무엇
TaskCompletionSource + SetResult 작업 + FromResult
가 SendAsync 방법에대? 당신이 원하는 모든 결과에 완성 된 Task<TResult>
(또는 하나없이 완료 Task
)을 반환하는 경우
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 내부 생성자로 이미 완료된 작업 생성 _. [소스 코드 주석에서] (http://referencesource.microsoft.com/#mscorlib/system/threading/Tasks/Task.cs,11a386e7d7cae64a). – Fabio
@Fabio 설명해 주셔서 감사합니다. 아마 이전 버전과의 호환성을위한 방법을 가짜로 만든 MS의 심플 코드를 보았을 것입니다. –