2

UserManagerExtensions の非同期バージョンと同期バージョン (CreateLocalUser や CreateLocalUserAsync など) があるのに、RoleManagerExtensions には非同期メソッドしかないのはなぜですか? レガシ コードからロールにユーザーを追加するにはどうすればよいでしょうか? AddUserToRoleAsync しかなく、同期的に実行するとデッドロックが発生します。AddUserToRoleAsync(userId, role).Result がハングし、.ConfigureAwait(false) も何もしません。

4

1 に答える 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 に答える