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