|
|
1
39
对。
如果您使用.NET 4.0,那么在不阻塞的情况下写入控制台的解决方案是非常简单的。其思想是将文本值排队,并让一个专用线程执行
|
|
|
2
33
根据.NET 4.5,
和
|
|
|
3
10
是的,console.writeline将阻塞,直到写入输出,因为它调用底层流实例的写入方法。您可以通过调用console.openstandardoutput以获取流,然后在该流上调用BeginWrite和EndWrite,异步写入标准输出流(即底层流);请注意,您必须执行自己的字符串编码(将System.String对象转换为byte[]),因为流只接受字节数组。 编辑 -一些示例代码用于启动:
编辑2 -另一个版本,基于Brian Gideon在评论中的建议(请注意,这只涵盖了可用的16个写行过载中的一个) 将begin/end方法实现为TextWriter类的扩展,然后添加一个AsyncConsole类来调用它们:
编辑3 或者,编写异步文本编写器,使用console.setout注入它,然后调用console.writeline 确切地 正常情况下。 文本编写器类似于:
请注意,我已经切换到使用任务来管理开始/结束方法:这是因为如果已经在进行异步写入,那么BeginWrite方法本身似乎会阻塞。 一旦你有了这个类,只需调用注入方法和 每一个 调用console.writeline,无论在何处进行或使用何种重载,都将成为异步的。共同CA:
|
|
4
6
嗯,控制台输出不是特别快。但这是一个不需要解决的“问题”。注意奖品:你是为了人类的利益而写信给主控台的。那个人不太可能读得那么快。 如果输出被重定向,它将停止变慢。如果这仍然对你的计划有影响,那么你可能只是在写 方式 信息太多。改为写入文件。 |
|
|
5
1
我桌上的一个快速测试表明是的,它会阻塞。
要异步地写入控制台,您可以将您的写操作发送到另一个线程,然后再将它们写出。您可以通过让另一个线程旋转并编写一个消息队列,或者通过链接来实现这一点。
我之前关于使用线程池的建议是一个糟糕的建议,因为它不能保证排序,因此,您的控制台输出可能会混淆。 |
|
|
6
0
是的,它将一直阻塞,直到输出写入屏幕。我不确定文档中是否明确说明了这一点,但您可以通过挖掘
|
|
|
7
-1
是的,它阻塞了。而且我所知道的框架中没有内置异步控制台写入。 |