Dựa trên một cuộc thảo luận dài trong cuộc trò chuyện và quá nhiều đào sâu, có vẻ như trong một số trường hợp khó hiểu, TPL đang chiếm quyền điều khiển chuỗi trình đọc chuyên dụng khi chúng ta làm những việc như .TrySetResult
(mà:chúng tôi làm thường xuyên). Điều này gây ra bế tắc tức thì nếu bạn thực hiện một cuộc gọi đồng bộ, vì nó không thể xử lý bất kỳ dữ liệu socket nào nếu nó đang bận chờ một tác vụ hoàn thành (chỉ có thể hoàn thành một mình). Chúng tôi thực sự có mã tại chỗ đặc biệt để ngăn chặn điều này , nhưng có vẻ như giải pháp thực sự buộc nó sẽ xảy ra trong một số trường hợp khác. Thật là kinh khủng. Tôi sẽ xem những gì tôi có thể tìm thấy. Nhưng về cơ bản, vấn đề là hiện tại , trong một số trường hợp hạn chế , TaskCompletionSource.TrySetResult
là cấp quyền cho TPL để chạy liên tục đồng bộ. Điều này bao gồm Task.WhenAny
.