Bắt đầu một ứng dụng giao diện điều khiển mới sử dụng đoạn mã sau -Tại sao khối Console.In.ReadLineAsync?
class Program
{
static void Main(string[] args)
{
while (true)
{
Task<string> readLineTask = Console.In.ReadLineAsync();
Debug.WriteLine("hi");
}
}
}
Console.In.ReadLineAsync chặn và không trả lại cho đến khi một dòng được nhập vào giao diện điều khiển .. như vậy "Hi" không bao giờ được ghi vào giao diện điều khiển.
Sử dụng chờ đợi trên Console.In.ReadLineAsync cũng chặn.
Tôi hiểu rằng các phương pháp Async CTP mới không chặn.
Lý do cho việc này là gì?
Dưới đây là một ví dụ
static void Main(string[] args)
{
Task delayTask = Task.Delay(50000);
Debug.WriteLine("hi");
}
này hoạt động như tôi mong đợi, nó đi thẳng đến dòng kế tiếp và in "hi" vì Task.Delay không chặn.
Bug được báo cáo ở đây https://connect.microsoft.com/VisualStudio/feedback/details/779079/console-readlineasync-is-actually-blocking-when-it-should-be-returning-a-task -ngay – NoPyGod