6

Tôi có một ứng dụng giao diện điều khiển rất đơn giản.Tại sao Console.ReadKey() chặn đầu ra của Console.WriteLine được gọi trong một luồng khác?

static void Main(string[] args) 
{ 
    DoAsync(); 
    Console.ReadKey(); 
} 

Ở đây DoAsync bắt đầu thiết lập nhiệm vụ và trả lại không chờ đợi hoàn thành nhiệm vụ. Mỗi tác vụ ghi vào Bảng điều khiển, nhưng ouptut không được hiển thị trước khi nhấn phím.
Khi tôi sử dụng Console.ReadLine mọi thứ hoạt động tốt.

Vì vậy, tôi tò mò về ReadKey() phân tử.

Trả lời

8

Từ the documentation cho Console.ReadKey():

Các ReadKey phương pháp chờ đợi, đó là, khối trên thread ban hành phương pháp ReadKey, cho đến khi một nhân vật hoặc chức năng phím được nhấn.

Điều gì thực sự làm là lấy khóa trên Console.InternalSyncObject, ngăn chặn các hoạt động tiếp theo trên bảng điều khiển.

Phương pháp Console.ReadLine() không chặn chuỗi theo cách này.

Đọc this article Tôi đoán bạn đã cài đặt .NET 4.5?

+0

Cảm ơn nhiều người, tôi đã tìm kiếm một cấp cao hơn (http://msdn.microsoft.com/en-us/library/w19esh7k.aspx) Và cho bài viết cũng vậy. –

Các vấn đề liên quan