我试图从同步库方法调用异步方法并运行到问题。我将首先展示一些代码。
public void Execute(RegisterUserCommand command)
{
var user = new UserAccountEntity
{
UserName = command.EmailAddress,
Email = command.EmailAddress,
};
var task = _userManager.CreateAsync(user, command.Password);
var result = task.Result; // Causes deadlock
if (!result.Succeeded)
throw new CommandInvalidException("Command failed", result.Errors);
}
调用task.Result使我的代码陷入僵局。
在做了一些研究(包括阅读this)和一些挖掘后,我现在认为我对导致死锁的原因有了比较了解。
我正在使用asp .net Identity中的UserManager。我使用了dotPeek,发现UserManager.CreateAsync调用UserValidator.ValidateAsync,它将等待一些任务而不调用.ConfigureAwait(false)。