Как я могу поддерживать цепочку результатов при выполнении неблокирующего ожидания? - PullRequest
0 голосов
/ 25 апреля 2019

Фон

Я использую класс 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.

Вопрос

Как сохранить цепочку результатов при выполнении неблокирующего ожидания?

...