Въз основа на дълга дискусия в чат и много ровене, изглежда, че в някои неясни сценарии TPL отвлича специалната нишка за четене, когато правим неща като .TrySetResult
(което:правим често). Това води до моментално блокиране, ако направите синхронно повикване, тъй като не може да обработи никакви данни на сокета, ако е зает с изчакване на задачата да завърши (която някога ще бъде завършена само от само себе си). Всъщност имаме въведен код особено за предотвратяване на това , но изглежда, че решението всъщност принуждава това да се случи в някои други сценарии. Което... е ужасно. Ще видя какво мога да намеря. Но основно проблемът е, че в момента , в някои ограничени сценарии , TaskCompletionSource.TrySetResult
дава право на TPL да изпълнява синхронни продължения. Това включва Task.WhenAny
.