ASP.NET身份异步与同步问题

时间:2013-09-25 10:21:55

标签: asp.net asp.net-mvc-5 asp.net-identity

为什么有UserManagerExtensions的异步和同步版本(如CreateLocalUser和CreateLocalUserAsync),但只有RoleManagerExtensions上的异步方法?我想如何将用户添加到遗留代码中的角色?只有AddUserToRoleAsync,并且在同步运行时遇到死锁。 AddUserToRoleAsync(userId,role).Result hangs和.ConfigureAwait(false)也不做任何事。

1 个答案:

答案 0 :(得分: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();
    }
}