Como posso ver na sua mensagem de exceção, sua contagem mínima de processos de trabalho é muito baixa para o tráfego que você tem.
TRABALHADOR:(Ocupado=10,Livre=32757,Min=2,Max=32767)
Você tinha 10 threads de trabalho ocupados quando essa exceção aconteceu, enquanto você tinha 2 threads de trabalho para iniciar.
Quando seu aplicativo fica sem threads disponíveis para concluir uma operação, o .NET inicia um novo (até o valor máximo, é claro). E espera um pouco para ver se um thread de trabalho adicional é necessário. Se seu aplicativo ainda precisar de threads de trabalho, o .NET iniciará outro. Depois outro, depois outro... Mas isso requer tempo. Não ocorre em 0 ms. Observando sua mensagem de exceção, podemos ver que o .NET criou 8 threads de trabalho adicionais (10 - 2 =8). Durante o processo de criação, essa operação específica do Redis esperou e, eventualmente, expirou.
Você pode usar
ThreadPool.SetMinThreads(Int32, Int32)
no início do seu aplicativo para definir a contagem mínima de threads. Eu sugiro que você comece com ThreadPool.SetMinThreads(10, 10)
e ajustá-lo como você testá-lo. Leitura adicional:
https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadpool.setminthreadshttps://stackexchange.github.io/StackExchange.Redis/Timeouts.html