2015-05-12 40 views
6

Sto provando a configurare l'identità per funzionare con il provider personalizzato. Finora tutto bene, ho creato UserStore:identità asp.net - SetPasswordHashAsync

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

(con tutti i metodi implementati) e UserManager:

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

e l'utente è il mio un'entità personalizzata per tenere gli utenti.

Il problema è che in UserStore ho le seguenti:

public async Task SetPasswordHashAsync(User user, string passwordHash) 

Da quello che ho capito, questo è chiamato prima della creazione dell'utente, così tutto quello che dovrei fare qui è:

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

... ma questo deve restituire un'attività e non vedo nulla di asincrono da fare qui.

  1. Perché il tipo di reso è Attività per SetPasswordHashAsync e non solo annullato?
  2. Come devo implementare SetPasswordHashAsync?

So che posso fare qualcosa di simile

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

... ma non è questo sincrono? È strano vedere tutti gli altri metodi decorati con async Task e utilizzare await e questo per restituire Task.FromResult()

Chiunque?

+0

Sono un po 'nello stesso posto. Dove hai imparato che dovevi semplicemente impostare l'hash nell'user localmente e non persisterlo? –

risposta

8

Le attività non devono essere asincrone. È possibile implementarlo come segue:

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

In .NET 4.6 ha anche ['Task.CompletedTask'] (https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.completedtask (v = vs.110) .aspx) Puoi usare. –

Problemi correlati