Bir async çağrısının sonucunu işlemek için IO iş parçacığı olmadığında ne olacağını merak ediyorum.Eşzamansız sonucu işlemek için IO iş parçacığı yoksa ne olur?
Eşzamansız bir web isteği hazırladığınızı varsayalım (bir sunucu uygulamasında tüm async kodları iş parçacığı havuzu tarafından el ile işlenir). İşletim sistemi, sizin için bir sonuç olduğunda sinyal verecektir ve ne zaman olduğunda, soketten gelen baytları okumak için bir IO iş parçacığına ihtiyacınız olacaktır. IO iş parçacığı yoksa, hepsi kullanımda olduğundan (iş parçacığı havuzu tarafından ayarlanan maks. Değere kadar) ne olur? Bir iplik mevcut olana kadar sinyalin bekleyebileceği bir kuyruk var mı? Yoksa sinyal duyulmuyor mu? İkincisi olursa, beklemede bekleyen kod ne olur?
Bir bilgisayardan çok fazla şey yapmasını istediğinizde gerçekleşen olağan şey: sadece yavaşlar. Bu çok derinden gömülü ve aslında CLR'nin bir parçası değil, [IHostIOCompletionManager arayüzü] (https://msdn.microsoft.com/en-us/library/ms164490 (v = vs.110) .aspx) işi bitirir . Hangi ana bilgisayarı kullandığınıza bağlı. Pratikte, SetMaxThreads() 'ın * completionPortThreads * argümanının tamamen yok sayıldığını ve eşzamanlı * yürütme * (beklemede değil) io tamamlamalarının işlemci sayısı sayısına eşit olduğunu varsaymak genellikle güvenlidir. –