背景:
我使用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链接。
问题:
在执行非阻塞等待时如何保持结果链方法?