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