.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