为什么有 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();
}
}