Op basis van een lange discussie in de chat en veel speurwerk, lijkt het erop dat in sommige obscure scenario's de TPL de speciale lezersthread kaapt wanneer we dingen doen zoals .TrySetResult
(wat:we vaak doen). Dit veroorzaakt een onmiddellijke impasse als je een synchrone aanroep doet, omdat het onmogelijk socketgegevens kan verwerken als het bezig is te wachten op een taak die is voltooid (die alleen ooit zou worden voltooid). We hebben inderdaad code specifiek om dit te voorkomen , maar het lijkt erop dat de tijdelijke oplossing forceert het gebeurt in sommige andere scenario's. Wat... verschrikkelijk is. Ik zal kijken wat ik kan vinden. Maar eigenlijk is het probleem dat momenteel , in sommige beperkte scenario's , TaskCompletionSource.TrySetResult
geeft de TPL de macht om synchrone voortzettingen uit te voeren. Dit omvat Task.WhenAny
.