C# 如何使用Usermanager防止死锁?
我在blazor(服务器)上有一个注册页面。在那个页面上,我想使用AspnetCor.Identity实现一个注册函数 这是方法:(\u usermanager的类型为AspNetCore.Identity.usermanager) 从blazor页面上的HandleValidSubmit中调用该方法:C# 如何使用Usermanager防止死锁?,c#,asp.net-core,async-await,asp.net-identity,blazor-server-side,C#,Asp.net Core,Async Await,Asp.net Identity,Blazor Server Side,我在blazor(服务器)上有一个注册页面。在那个页面上,我想使用AspnetCor.Identity实现一个注册函数 这是方法:(\u usermanager的类型为AspNetCore.Identity.usermanager) 从blazor页面上的HandleValidSubmit中调用该方法: <EditForm Model="@_registerUser" OnValidSubmit="HandleValidSubmit"> //... </EditForm>
<EditForm Model="@_registerUser" OnValidSubmit="HandleValidSubmit">
//...
</EditForm>
@code {
private void HandleValidSubmit()
{
if (identity.Register(_registerUser)) {
NaviationManager.NavigateTo($"/manage/registersent");
}
}
}
//...
@代码{
私人无效手册提交()
{
if(identity.Register(_registerUser)){
NaviationManager.NavigateTo($“/manage/registersent”);
}
}
}
当注册失败时,它的工作原理与设计相同,返回false。但是,当注册顺利时,我在\u userManager.CreateAsync(newUser,“password”).Result处陷入了死锁代码>
当我不尝试使异步调用同步,并用\u userManager.CreateAsync(newUser,“password”)
替换调用时(并忽略任何返回值),创建用户时不会出现问题
我应该如何处理从HandleValidSubmit
中返回值的异步调用?使一切异步
-返回任务
s并根据需要等待它们。不要调用.Result
或.Success
。让编译器帮助您编写更好的异步代码
例如,makeHandleValidSubmit
async
private async void HandleValidSubmit()
{
if (await identity.RegisterAsync(_registerUser))
{
NaviationManager.NavigateTo($"/manage/registersent");
}
}
async void
应仅用于事件类型的事件,因为它们类似于“开火并忘记”。使一切异步
-返回任务
并等待它们(视情况而定)。不要调用.Result
或.Success
。让编译器帮助您编写更好的异步代码
例如,makeHandleValidSubmit
async
private async void HandleValidSubmit()
{
if (await identity.RegisterAsync(_registerUser))
{
NaviationManager.NavigateTo($"/manage/registersent");
}
}
async void
应该只用于事件类型的东西,因为它们类似于“点火并忘记”。Ah。我没想到HandleValidSubmit可以是异步的:)不应该HandleValidSubmit
然后返回任务
?@Nkosi这取决于OnValidSubmit
是如何实现的。啊。我没想到HandleValidSubmit可以是异步的:)不应该HandleValidSubmit
然后返回任务
?@Nkosi这取决于OnValidSubmit
的实现方式。