2015-05-12 113 views
6

我正在嘗試配置身份以使用自定義提供程序。到目前爲止,一切都很好,我已經創建UserStoreasp.net身份 - SetPasswordHashAsync

public class UserStore : IUserStore<User>, IUserPasswordStore<User> 

(所有的方法來實現)和的UserManager:

public UserManager(IUserStore<User> userStore) 
     : base(userStore) 
    { } 

和用戶是拿我的用戶自定義實體。

的問題是,在UserStore我有以下幾點:

public async Task SetPasswordHashAsync(User user, string passwordHash) 

據我瞭解,在創建用戶之前,這就是所謂的,所以一切我應該在這裏做的是:

public Task SetPasswordHashAsync(User user, string passwordHash) 
{ 
    user.PasswordHash = passwordHash; 
} 

...但這必須返回一個任務,我沒有看到任何異步在這裏完成。

  1. 爲什麼返回類型是任務SetPasswordHashAsync而不只是無效?
  2. 我該如何實施SetPasswordHashAsync

我知道我可以這樣做

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

...但不是這個同步?看到用async任務和使用await,並且這一個返回Task.FromResult()

所有其他方法裝飾是奇怪的任何人?

+0

我有點兒在同一個地方。你從哪裏知道你只需要在用戶本地設置散列,而不是堅持呢? –

回答

8

任務不一定是異步的。你可以實現它如下:

public Task SetPasswordHashAsync(User user, string passwordHash) 
{ 
    user.PasswordHash = passwordHash; 
    return Task.FromResult(0); 
} 
+5

在.NET 4.6中它也有['Task.CompletedTask'](https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.completedtask(v = vs.110).aspx ) 您可以使用。 –