ASP.NET 标识异步与同步问题



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

对于 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();
    }
}

相关内容

  • 没有找到相关文章

最新更新