FindAsync永远不会回来,但是Find工作得很好



我正在使用FluentValidation来验证对象。我只是检查用户是否存在于数据库中。就我而言,DbContext.Entity.Find 工作正常,但 DbContext.Entity.FindAsync 永远不会返回。

请参考下面的源代码。

    public class ChangeStatusOfUserCommandValidator : AbstractValidator<ChangeStatusOfUserCommand>
{
    private readonly FieldSellDbContext dbContext;
    private ChangeStatusOfUserCommandValidator()
    { }
    public ChangeStatusOfUserCommandValidator(FieldSellDbContext databaseContext)
    {
        dbContext = databaseContext;
        RuleFor(u => u.UserId).NotEmpty();
        RuleFor(u => u.UserId).MustAsync(UserExists).WithMessage("Provided user id already exists in the database.");
    }
    public async Task<bool> UserExists(int value, CancellationToken cancellationToken)
    {
        var user = await dbContext.Users.FindAsync(value, cancellationToken);
        //var user = dbContext.Users.Find(value); --Works fine even in async method
        return user != null;
    }
}

谢谢

你的问题几乎可以肯定是在你的调用堆栈的上游,代码调用Task<T>.ResultTask.Wait()Task.GetAwaiter().GetResult()或一些类似的阻塞方法。如果代码在单线程上下文(例如,UI 线程)中的异步代码上阻塞,则可能会死锁。

正确的解决方案是一直使用异步;也就是说,使用 await 而不是阻止异步代码。Fluent 验证具有异步工作流(例如,ValidateAsyncMustAsync ),因此您需要确保使用它而不是同步 API。

相关内容

  • 没有找到相关文章

最新更新