问题描述
我不得不在生产时调查一些异常,然后发现使用FluentValidation的这段代码:
(inside async method)
var validator = new SomeCustomValidator();
var validationResult = validator.ValidateAsync(request).Result.ValidateRepositoryAsync(request,someRepository);
PS:方法ValidateRepositoryAsync
是我们项目的自定义扩展。
要对其进行一些重构,我只是更改为:
(inside async method)
ValidationResult validationResult;
var validator = new SomeCustomValidator();
validationResult = await validator.ValidateAsync(request);
validationResult = await validationResult.ValidateRepositoryAsync(request,someRepository);
因此,此代码需要首先执行ValidateAsync
,等待它,然后执行结果ValidateRepositoryAsync
。
现在的问题是,我想知道是否还有另一种方法可以使用ContinueWith在同一行代码中完成此操作,或者这是解决此问题的更简洁的方法?
那是我离得更近的地方,但是阅读起来似乎并不干净:
var validator = new SomeCustomValidator();
var validationResult = await (await validator.ValidateAsync(request)).ValidateRepositoryAsync(request,someRepository);
对此有何想法?
谢谢!
解决方法
由于Traceback (most recent call last):
File "<stdin>",line 1,in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'one.txt'
是您自己的扩展方法,也许您可以创建它的另一个原型,该原型接受未完成的任务。
ValidateRepositoryAsync
有了这个版本,您要做的就是
static async Task<ValidationResult> ValidateRepositoryAsync(this Task<ValidationResult> source,request,someRepository)
{
var result = await source;
return await result.ValidateRepositoryAsync(request,someRepository);
}