2013-09-25 79 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(); 
    } 
}