2013-09-25 116 views
2

爲什麼有UserManagerExtensions的異步和同步版本(如CreateLocalUser和CreateLocalUserAsync),但只有RoleManagerExtensions上的異步方法?我想如何從舊代碼中將用戶添加到角色中?只有AddUserToRoleAsync,並且在同步運行時出現死鎖。 AddUserToRoleAsync(userId,role).Result掛起,而.ConfigureAwait(false)也不起作用。ASP.NET身份異步與同步問題

回答

3

對於RTM版本,會有同步版本,我猜這只是RC版本中的一個錯誤。

下面是我們在內部使用,以實現同步版本的代碼,你可以使用這個在此期間,以安全地調用異步方法:

static class AsyncHelper { 
    private static readonly TaskFactory _myTaskFactory = new TaskFactory(CancellationToken.None, TaskCreationOptions.None, TaskContinuationOptions.None, TaskScheduler.Default); 
    public static TResult RunSync<TResult>(Func<Task<TResult>> func) { 
     return _myTaskFactory.StartNew(func).Unwrap().GetAwaiter().GetResult(); 
    } 

    public static void RunSync(Func<Task> func) { 
     _myTaskFactory.StartNew(func).Unwrap().GetAwaiter().GetResult(); 
    } 
}