2015-08-11 2 views
0

У меня есть приложение ASP.NET MVC и У меня есть OAuth Запрос владелец ресурса Пароль потока для проверки подлинности, например:Возможно ли использование ConfigureAwait (false) в этом случае?

public override async Task GrantResourceOwnerCredentials(
    OAuthGrantResourceOwnerCredentialsContext context) 
{ 
    var userManager = (CustomUserManager)context.OwinContext.Get<>(); 
    var user = await userManager 
     .FindAsync(context.UserName, context.Password) 
     .ConfigureAwait(false) 
    var ticket = new AuthenticationTicket(identity, properties);  
    context.Validated(ticket); 
} 

Проблема заключается в следующем: если я не ConfigureAwait (ложь), я зашел в тупик, а Task был отменен исключение. Но с ConfigureAwait (false) все работает нормально.

Но мой вопрос: правильно ли использовать ConfigureAwait (false) в этом случае? Можно ли потерять контекст с ConfigureAwait (false) в этом случае?

Заранее спасибо.

ответ

1

Он должен только зайти в тупик, если что-то еще вверху стека блокирует асинхронный код. Вероятно, фильтр MVC, поскольку они не могут (пока) быть асинхронными.

Это нормально использовать ConfigureAwait(false) в качестве обходного пути, до тех пор, как AuthenticationTicket конструктор и AuthenticationTicket.Validated может работать вне контекста запроса ASP.NET. Я понятия не имею, могут ли они или нет.

Обратите внимание, что эти виды хакеров недолговечны в этой точке; ASP.NET vNext будет поддерживать асинхронные фильтры действий MVC, а затем код может быть полностью асинхронным.

Смежные вопросы