在执行无阻塞等待时如何保持结果链方法?

时间:2019-04-25 00:46:51

标签: c# asynchronous async-await task

背景

我使用Result类,该类使我可以将成功和失败lambda链接在一起。例如:

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 lambda,就像这样:

public Result<T> OnSuccess<T>(Func<Task<Result<T>>> func)

在该函数中,要求以非阻塞方式等待Task并返回结果。

但是,通过使用await,必须将OnSuccess函数标记为异步并因此必须返回Task<Result<T>>,这反过来会中断OnSuccess链接。

问题

在执行非阻塞等待时如何保持结果链方法?

0 个答案:

没有答案