Фон
Я использую класс Result, который позволяет мне связывать лямбды успеха и неудачи вместе. Например:
var result = DoSomething();
result.OnSuccess(() => DoSomethingElse()).OnFailure(() => LogFailure());
Одна из функций OnSuccess, которую я имею:
public Result<T> OnSuccess<T>(Func<Result<T>> func)
{
if (!this.Success)
{
return Fail<T>(this);
}
return func();
}
Задача
У меня есть просьба поддержать async lambdas, вот так:
public Result<T> OnSuccess<T>(Func<Task<Result<T>>> func)
Внутри функции запрос заключается в том, чтобы ожидать выполнения задачи неблокирующим образом и возвращать результат.
Но, используя await, функция OnSuccess должна быть помечена как асинхронная и, следовательно, должна возвращать Task<Result<T>>
, что, в свою очередь, нарушает цепочку OnSuccess.
Вопрос
Как сохранить цепочку результатов при выполнении неблокирующего ожидания?