當前位置: 妍妍網 > 碼農

.NET 9 Preview 1 中的 Broadcasting TextWriter

2024-02-25碼農

.NET 9 Preview 1 中的 Broadcasting TextWriter

Intro

.NET 9 Preview 1 中引入了一個 TextWriter.CreateBroadcasting(params TextWriter[] writers) API 可以建立一個廣播式的 TextWriter 物件,可以用來簡化同時需要向多個 TextWriter 輸出的場景

Sample

在某些場景下,我們可能需要同時輸出到多個位置,比如說有時候我們會期望輸出到控制台的同時,還能夠在程式碼裏獲取到控制台的輸出,下面就是使用這個 API 的一個例子,範例如下:

var previousWriter = Console.Out;
usingvar textWriter1 = new StringWriter();
usingvar newWriter = TextWriter.CreateBroadcasting(previousWriter, textWriter1);
// set to the broadcasting writer
Console.SetOut(newWriter);
Console.WriteLine("Hello World");
newWriter.Flush();
Console.WriteLine($"textWriter1: {textWriter1.GetStringBuilder()}");
textWriter1.GetStringBuilder().Clear();
// set back to original writer
Console.SetOut(previousWriter);
Console.WriteLine("Hello .NET");
Console.WriteLine($"textWriter1: {textWriter1.GetStringBuilder()}");
Console.WriteLine("Completed");




這裏的範例是輸出到控制台的同時並且寫入到另外一個 StringWriter ,最後再切換回原來的 Output 再對比一下,輸出結果如下:

output

可以看到我們在使用 broadcastingWriter 的時候,兩個 writer 都會寫入數據,控制台和我們的 textWriter1 都寫入了 Hello World ,更新回預設的 writer 時,只有控制台輸出了, textWriter1 並未寫數據

這對於想要同時寫入輸出到多個地方的場景會非常的有用

References

  • https://github.com/dotnet/runtime/issues/93623

  • https://github.com/dotnet/runtime/pull/96732

  • https://github.com/WeihanLi/SamplesInPractice/blob/main/net9sample/Net9Samples/TextWriterBroadcastingSample.cs