Baseret på en lang diskussion i chat og en masse gravearbejde, ser det ud til, at TPL i nogle obskure scenarier kaprer den dedikerede læsetråd, når vi laver ting som .TrySetResult
(hvilket:vi gør ofte). Dette forårsager et øjeblikkeligt dødvande, hvis du foretager et synkront opkald, da det umuligt kan behandle nogen socket-data, hvis det er travlt med at vente på, at en opgave bliver fuldført (som kun ville blive fuldført af sig selv). Vi har faktisk kode på plads specifikt for at forhindre dette , men det ser ud til, at løsningen faktisk tvinger det skal ske i nogle andre scenarier. Hvilket... er forfærdeligt. Jeg vil se, hvad jeg kan finde. Men dybest set er problemet, at i øjeblikket , i nogle begrænsede scenarier , TaskCompletionSource.TrySetResult
giver strøm til TPL til at køre synkrone fortsættelser. Dette inkluderer Task.WhenAny
.