Jak widzę z Twojego komunikatu o wyjątku, minimalna liczba procesów roboczych jest zbyt niska w stosunku do ruchu, który masz.
PRACOWNIK:(Zajęty=10,Wolny=32757,Min=2,Maks.=32767)
W momencie wystąpienia tego wyjątku było 10 zajętych wątków roboczych, a na początku były 2 wątki robocze.
Gdy w aplikacji zabraknie dostępnych wątków do zakończenia operacji, platforma .NET uruchamia nową (oczywiście do maksymalnej wartości). I czeka trochę, aby zobaczyć, czy potrzebny jest dodatkowy wątek roboczy. Jeśli aplikacja nadal potrzebuje wątków roboczych, .NET uruchamia inny. Potem kolejny, potem kolejny... Ale to wymaga czasu. Nie występuje w ciągu 0 ms. Patrząc na komunikat o wyjątku, widzimy, że platforma .NET utworzyła 8 dodatkowych wątków roboczych (10–2 =8). Podczas procesu tworzenia ta konkretna operacja Redis czekała i ostatecznie wygasła.
Możesz użyć ThreadPool.SetMinThreads(Int32, Int32)
na początku aplikacji, aby ustawić minimalną liczbę wątków. Proponuję zacząć od ThreadPool.SetMinThreads(10, 10)
i dostosuj go podczas testowania.
Dodatkowy odczyt:
https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadpool.setminthreadshttps://stackexchange.github.io/StackExchange.Redis/Timeouts.html