Na základě dlouhé diskuze v chatu a spousty kopání to vypadá, že v některých nejasných scénářích TPL unese vyhrazené čtenářské vlákno, když děláme věci jako .TrySetResult
(což:děláme často). To způsobí okamžité zablokování, pokud provedete synchronní volání, protože nemůže zpracovat žádná data soketu, pokud je zaneprázdněn čekáním na dokončení úlohy (která by byla dokončena pouze sama). Ve skutečnosti máme kód, konkrétně abychom tomu zabránili , ale vypadá to, že toto řešení ve skutečnosti vynucuje k tomu dojde v některých jiných scénářích. Což... je hrozné. Uvidím, co najdu. Ale v zásadě je problém v tom, že aktuálně , v některých omezených scénářích , TaskCompletionSource.TrySetResult
dává sílu TPL provozovat synchronní pokračování. To zahrnuje Task.WhenAny
.