Это мой очень простой класс, который демонстрирует проблему:
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.Если я отлаживаю его, выполнение прибывает в оператор return и продолжается, когда я нажимаю F5, но http-запрос никогда не возвращается, и http-клиент заканчивает ожиданием тайм-аута.
Я действительно запутался, потому что я делаю то, что говорит мне компилятор: верните Task<HttpResponseMessage>
.Вызов base.SendAsync работает просто отлично.Что мне здесь не хватает?
Редактировать:
Хорошо, так что я обнаружил, что
return Task.FromResult(new HttpResponseMessage(HttpStatusCode.Unauthorized));
работает, как ожидалось.Тем не менее, я хотел бы понять, почему вышеуказанный подход не работает?В обоих случаях я создаю Task<HttpResponseMessage>
Почему я получаю ожидаемое поведение только во втором случае?