Comme je peux le voir dans votre message d'exception, votre nombre minimum de processus de travail est trop faible pour le trafic que vous avez.
TRAVAILLEUR :(Occupé=10,Libre=32757,Min=2,Max=32767)
Vous aviez 10 threads de travail occupés lorsque cette exception s'est produite, alors que vous aviez 2 threads de travail pour le démarrage.
Lorsque votre application manque de threads disponibles pour terminer une opération, .NET en démarre un nouveau (jusqu'à la valeur maximale, bien sûr). Et attend un peu pour voir si un thread de travail supplémentaire est nécessaire. Si votre application a encore besoin de threads de travail, .NET en démarre un autre. Puis un autre, puis un autre... Mais cela demande du temps. Cela ne se produit pas en 0 ms. En regardant votre message d'exception, nous pouvons voir que .NET a créé 8 threads de travail supplémentaires (10 - 2 =8). Pendant le processus de création, cette opération Redis particulière a attendu et a finalement expiré.
Vous pouvez utiliser ThreadPool.SetMinThreads(Int32, Int32)
méthode au début de votre application pour définir le nombre de threads minimum. Je vous suggère de commencer par ThreadPool.SetMinThreads(10, 10)
et ajustez-le au fur et à mesure que vous le testez.
Lecture supplémentaire :
https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadpool.setminthreadshttps://stackexchange.github.io/StackExchange.Redis/Timeouts.html