asp.net标识 - SetPasswordHashAsync

rar*_*esm 7 c# asp.net asynchronous asp.net-identity

我正在尝试配置身份以使用自定义提供程序.到目前为止一切都很好,我创造了UserStore:

public class UserStore : IUserStore<User>, IUserPasswordStore<User>
Run Code Online (Sandbox Code Playgroud)

(实现所有方法)和UserManager:

public UserManager(IUserStore<User> userStore)
        : base(userStore)
    { }
Run Code Online (Sandbox Code Playgroud)

用户是我的自定义实体来容纳用户.

问题是,UserStore我有以下内容:

public async Task SetPasswordHashAsync(User user, string passwordHash)
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这是在用户创建之前调用的,所以我应该在这里做的是:

public Task SetPasswordHashAsync(User user, string passwordHash)
{
    user.PasswordHash = passwordHash;
}
Run Code Online (Sandbox Code Playgroud)

...但是这必须返回一个Task,我在这里看不到异步.

  1. 为什么返回类型是Task SetPasswordHashAsync而不仅仅是void?
  2. 我应该如何实施SetPasswordHashAsync

我知道我可以做点什么

public async Task SetPasswordHashAsync(User user, string passwordHash)
{
    user.PasswordHash = passwordHash;
    await Task.FromResult(0);
}
Run Code Online (Sandbox Code Playgroud)

......但这不是同步的吗?看到用asyncTask和use 装饰的所有其他方法很奇怪await,而且这个方法要返回Task.FromResult()

任何人?

Dmi*_* S. 9

任务不必是异步的.您可以按如下方式实现它:

public Task SetPasswordHashAsync(User user, string passwordHash)
{
    user.PasswordHash = passwordHash;
    return Task.FromResult(0);
}
Run Code Online (Sandbox Code Playgroud)

  • 在.NET 4.6中它还有[`Task.CompletedTask`](https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.completedtask(v = vs.110).aspx)您可以使用. (9认同)