重构多个独立的等待调用

问题描述

我不得不在生产时调查一些异常,然后发现使用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);
}