【发布时间】:2018-12-12 03:23:22
【问题描述】:
我正在为 Web 服务器库制作 language-ext 和功能代码样式的原型,以便在我的项目之间共享。我真的很喜欢使用 LINQ 查询语法绑定 async 步骤,但我现在遇到了这个编译器问题:language-ext Task of Either with multiple from clauses。
要实现该链接中建议的解决方案,我需要重构此方法:
private static async Task<Either<RouteError, object>> DispatchRequest<T>(
IRequestDispatcher requestDispatcher,
T request)
where T : class, IRequest
{
var result = await requestDispatcher.Send(request);
return result.Match<Either<RouteError, object>>(
Some: x => x,
None: () => new NotFoundError(),
Fail: ex => new InternalServerError(ex));
}
其中 requestDispatcher 是:
public interface IRequestDispatcher
{
Task<OptionalResult<object>> Send<T>(T request) where T : IRequest;
}
我需要的是一个带有此签名的方法,以便在 LINQ 表达式中更容易使用:
private static EitherAsync<RouteError, object> DispatchRequest<T>(
IRequestDispatcher requestDispatcher,
T request)
where T : class, IRequest
{
// What should the implementation look like?
}
我不知道如何构造该方法,以便我可以await 然后根据结果返回左或右。与带有Task 返回值的漂亮而干净的原始实现相比,到目前为止我尝试的所有东西看起来都很难看。
【问题讨论】:
-
IRequestDispatcher.Send返回什么类型?
标签: c# language-ext