Berdasarkan diskusi panjang dalam obrolan, dan banyak penggalian, sepertinya dalam beberapa skenario yang tidak jelas TPL membajak utas pembaca khusus ketika kami melakukan hal-hal seperti .TrySetResult
(yang:sering kita lakukan). Ini menyebabkan kebuntuan instan jika Anda membuat panggilan sinkron, karena tidak mungkin memproses data soket apa pun jika sibuk menunggu tugas untuk diselesaikan (yang hanya akan diselesaikan dengan sendirinya). Kami sebenarnya memiliki kode khusus untuk mencegah hal ini , tapi sepertinya solusi sebenarnya memaksa itu terjadi dalam beberapa skenario lain. Yang... mengerikan. Saya akan melihat apa yang dapat saya temukan. Tapi pada dasarnya, masalahnya adalah saat ini , dalam beberapa skenario terbatas , TaskCompletionSource.TrySetResult
memberikan daya ke TPL untuk menjalankan kelanjutan sinkron. Ini termasuk Task.WhenAny
.