2013-09-25 3 views
2

Почему существуют версии async и sync UserManagerExtensions (например, CreateLocalUser и CreateLocalUserAsync), но только методы async для RoleManagerExtensions? Как я могу добавить пользователя к роли из моего старого кода? Существует только AddUserToRoleAsync, и я запускаю его синхронно. AddUserToRoleAsync (userId, role) .Result зависает и .ConfigureAwait (false) ничего не делает.ASP.NET-идентификатор async vs sync issues

ответ

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