Проблемы с асинхронной и синхронной идентификацией ASP.NET

Почему существуют асинхронные и синхронные версии UserManagerExtensions (например, CreateLocalUser и CreateLocalUserAsync), но только асинхронные методы для RoleManagerExtensions? Как я могу добавить пользователя в роль из моего устаревшего кода? Есть только AddUserToRoleAsync и у меня тупик при синхронном запуске. AddUserToRoleAsync(userId, role).Result зависает, и .ConfigureAwait(false) также ничего не делает.


person graycrow    schedule 25.09.2013    source источник


Ответы (1)


Для выпуска 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();
    }
}
person Hao Kung    schedule 25.09.2013