Zastanawiam się, co się dzieje, gdy nie ma wątków IO do obsługi wyniku połączenia asynchronicznego.Co się stanie, jeśli nie ma wątków IO do obsługi wyniku asynchronicznego?
Załóżmy, że wykonujesz żądanie asynchroniczne (w aplikacji serwera, więc cały kod asynchroniczny jest przekazywany przez pulę wątków). System operacyjny zasygnalizuje, kiedy pojawi się wynik, a kiedy będzie potrzebny, będzie potrzebny wątek IO do odczytania bajtów z gniazda. Jeśli nie ma dostępnych wątków IO, ponieważ wszystko jest w użyciu (co oznacza maksimum ustawione przez pulę wątków), co się dzieje? Czy istnieje kolejka, w której sygnał może czekać, aż będzie dostępny wątek? A może sygnał nie słychać? Jeśli tak się stanie, co stanie się z kodem czekającym na oczekiwanie?
Zwykle dzieje się tak, gdy prosisz komputer o zbyt wiele rzeczy: po prostu zwalnia. Jest to bardzo głęboko ukryte i nie jest częścią CLR, [IHostIOCompletionManager interface] (https://msdn.microsoft.com/en-us/library/ms164490 (v = vs.110) .aspx) wykonuje zadanie . Zależy od hosta, którego używasz. W praktyce zwykle można bezpiecznie założyć, że argument * completionPortThreads * dla SetMaxThreads() jest całkowicie ignorowany, a maksymalna liczba równoczesnych * wykonywanych * (nie oczekujących) uzupełnień io jest równa liczbie rdzeni procesorów. –