.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 再對比一下,輸出結果如下:
可以看到我們在使用 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