当前位置: 欣欣网 > 码农

.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