Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Exceção de tempo limite após comandos assíncronos e Task.WhenAny aguarda em StackExchange.Redis


Com base em uma longa discussão no bate-papo e muita pesquisa, parece que em alguns cenários obscuros o TPL está seqüestrando o thread de leitor dedicado quando estamos fazendo coisas como .TrySetResult (que:fazemos com frequência). Isso causa um impasse instantâneo se você fizer uma chamada síncrona, já que não pode processar nenhum dado de soquete se estiver ocupado aguardando a conclusão de uma tarefa (que só seria concluída por si mesma). Na verdade, temos um código em vigor especificamente para evitar isso , mas parece que a solução alternativa realmente força que isso aconteça em alguns outros cenários. O que... é horrível. Vou ver o que posso encontrar. Mas basicamente, o problema é que atualmente , em alguns cenários limitados , TaskCompletionSource.TrySetResult está dando poder ao TPL para executar continuações síncronas. Isso inclui Task.WhenAny .