Sur la base d'une longue discussion dans le chat et de nombreuses recherches, il semble que dans certains scénarios obscurs, le TPL détourne le fil de lecture dédié lorsque nous faisons des choses comme .TrySetResult
(ce qui :nous le faisons souvent). Cela provoque un blocage instantané si vous effectuez un appel synchrone, car il ne peut éventuellement traiter aucune donnée de socket s'il est occupé à attendre la fin d'une tâche (qui ne serait jamais terminée que par elle-même). Nous avons en fait un code en place spécifiquement pour empêcher cela , mais il semble que la solution de contournement force que cela se produise dans d'autres scénarios. Ce qui... est horrible. Je vais voir ce que je peux trouver. Mais fondamentalement, le problème est que actuellement , dans certains scénarios limités , TaskCompletionSource.TrySetResult
donne le pouvoir au TPL d'exécuter des continuations synchrones. Cela inclut Task.WhenAny
.