Мне удобно выполнять синхроническую работу перед вызовом внутреннего обработчика SendAsync() и выполнять синхронную работу после завершения внутреннего обработчика с помощью завершения. например:
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
// do some sync work before inner handler here
var sendTask = base.SendAsync(request, cancellationToken);
return sendTask.ContinueWith(
task => { // do some sync work afterwards here });
}
Однако теперь мне нужно вызвать операцию привязки ввода-вывода из обработчика делегирования. Операция привязки IO уже завершена как Task<bool>
. Мне нужно использовать результат, чтобы определить, продолжать ли внутренний обработчик.
Примером может быть сетевой вызов для авторизации запроса. Я должен сделать это, чтобы интегрироваться с существующей системой. В общем, я думаю, что для этой проблемы существуют допустимые сценарии, и она должна иметь работоспособное решение.
Каков правильный способ реализации SendAsync в этом случае, так что я выполняю асинхронно связанную с IO задачу и продолжаю асинхронно выполнять внутренний обработчик?
Ключевым моментом является то, что я хочу быть уверенным, что поток запроса не будет заблокирован в любой момент.