Baserat på en lång diskussion i chatten och mycket grävande, ser det ut som att TPL i vissa oklara scenarier kapar den dedikerade läsartråden när vi gör saker som .TrySetResult
(vilket:vi gör ofta). Detta orsakar ett omedelbart dödläge om du ringer ett synkront samtal, eftersom det omöjligt kan behandla några socketdata om det är upptaget och väntar på att en uppgift ska slutföras (som bara någonsin skulle slutföras av sig själv). Vi har faktiskt kod på plats specifikt för att förhindra detta , men det ser ut som att lösningen faktiskt tvingar det kommer att hända i vissa andra scenarier. Vilket... är hemskt. Jag ska se vad jag kan hitta. Men i grunden är problemet att för närvarande , i vissa begränsade scenarier , TaskCompletionSource.TrySetResult
ger ström till TPL för att köra synkrona fortsättningar. Detta inkluderar Task.WhenAny
.