Sulla base di una lunga discussione in chat e di molte ricerche, sembra che in alcuni scenari oscuri il TPL stia dirottando il thread del lettore dedicato quando stiamo facendo cose come .TrySetResult
(che:facciamo spesso). Ciò provoca un deadlock istantaneo se si effettua una chiamata sincrona, poiché non è possibile elaborare alcun dato socket se è occupato in attesa del completamento di un'attività (che verrebbe completata solo da sola). In realtà abbiamo del codice in atto specificamente per impedirlo , ma sembra che la soluzione alternativa in realtà forza accada in altri scenari. Il che... è orribile. vedrò cosa riesco a trovare. Ma fondamentalmente, il problema è che attualmente , in alcuni scenari limitati , TaskCompletionSource.TrySetResult
sta dando potenza al TPL per eseguire continuazioni sincrone. Ciò include Task.WhenAny
.