C# 如何使用Usermanager防止死锁?

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>

我在blazor(服务器)上有一个注册页面。在那个页面上,我想使用AspnetCor.Identity实现一个注册函数

这是方法:(\u usermanager的类型为AspNetCore.Identity.usermanager)

从blazor页面上的HandleValidSubmit中调用该方法:

<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
。让编译器帮助您编写更好的异步代码

例如,make
HandleValidSubmit
async

private async void HandleValidSubmit()
{
    if (await identity.RegisterAsync(_registerUser)) 
    {
        NaviationManager.NavigateTo($"/manage/registersent");
    }
}

async void
应仅用于事件类型的事件,因为它们类似于“开火并忘记”。

使一切
异步
-返回
任务
并等待它们(视情况而定)。不要调用
.Result
.Success
。让编译器帮助您编写更好的异步代码

例如,make
HandleValidSubmit
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
的实现方式。