Dot-Net

Console.WriteLine 是否阻塞?

  • September 8, 2010

Console.WriteLine在輸出被寫入之前阻塞還是立即返回?

如果確實阻塞,是否有將非同步輸出寫入控制台的方法?

Console.WriteLine 會阻塞直到輸出被寫入還是立即返回?

是的。

如果確實阻塞,是否有將非同步輸出寫入控制台的方法?

如果您使用的是 .NET 4.0,那麼在不阻塞的情況下寫入控制台的解決方案非常簡單。這個想法是將文本值排隊並讓一個專用執行緒進行Console.WriteLine呼叫。Console生產者-消費者模式在這裡是理想的,因為它保留了使用本機類時隱含的時間順序。.NET 4.0 使這變得簡單的原因是它具有BlockingCollection類,該類有助於生產者-消費者模式的產生。如果您不使用 .NET 4.0,那麼您可以通過下載Reactive Extensions框架來獲得反向移植。

public static class NonBlockingConsole
{
 private static BlockingCollection<string> m_Queue = new BlockingCollection<string>();

 static NonBlockingConsole()
 {
   var thread = new Thread(
     () =>
     {
       while (true) Console.WriteLine(m_Queue.Take());
     });
   thread.IsBackground = true;
   thread.Start();
 }

 public static void WriteLine(string value)
 {
   m_Queue.Add(value);
 }
}

引用自:https://stackoverflow.com/questions/3670057