在FluentValidation中,有两种版本的验证方法:Validate和ValidateAsync。
我对异步版本感到困惑,为什么我们需要在普通验证API中使用它。我认为异步在CPU绑定操作中是无用的,看起来这个验证不会涉及任何IO东西。
是否有任何情况我们会使用异步版本而不是同步版本?
答案 0 :(得分:0)
实际上,您可以使用异步版本来检查服务器的验证,例如,检查电子邮件或密码是否唯一。
答案 1 :(得分:0)
如 documentation 中所述,只要您使用 MustAsync
或 CustomAsync
定义自定义规则,以及使用 WhenAsync
定义异步条件,都应调用异步版本.
下面是一个例子:
public class CustomerValidator : AbstractValidator<Customer> {
SomeExternalWebApiClient _client;
public CustomerValidator(SomeExternalWebApiClient client) {
_client = client;
RuleFor(x => x.Id).MustAsync(async (id, cancellation) => {
bool exists = await _client.IdExists(id);
return !exists;
}).WithMessage("ID Must be unique");
}
}
了解在使用 automatic validation with ASP.NET 时不应使用异步规则也很重要,因为 ASP.NET 的验证管道不是异步的。如果您将异步规则与 ASP.NET 的自动验证一起使用,它们将始终同步运行。