2

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

4

1 回答 1

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();
    }
}
于 2013-09-25T23:18:51.553 回答