C# 网络阻塞到非阻塞,仅线程作为选项?

C# 网络阻塞到非阻塞,仅线程作为选项?,c#,networking,tcp,irc,C#,Networking,Tcp,Irc,所以我已经用C#一天了。我正在编写的第一个应用程序是一个简单的基于控制台的IRC客户机,但是它比我想象的要难。因为我从两个流读取:控制台和irc服务器,所以我需要某种非阻塞I/O 目前,我有以下代码: while (((sInput = sr.ReadLine()) != null) || ((uuInput = Console.ReadLine()) != null)) { // stuff

所以我已经用C#一天了。我正在编写的第一个应用程序是一个简单的基于控制台的IRC客户机,但是它比我想象的要难。因为我从两个流读取:控制台和irc服务器,所以我需要某种非阻塞I/O

目前,我有以下代码:

while (((sInput = sr.ReadLine()) != null) || ((uuInput = Console.ReadLine()) != null))
                {
                    // stuff
                }
但是,这将始终执行sInput,因为.ReadLine()是阻塞的,因此最终会在末尾返回True,所以OR的第二个块将永远不会执行

解决这个问题的办法是什么?用线程自己实现它?在标准C#库中,我似乎找不到任何NIO库。我更喜欢小而干净的解决方案,因为我不想使这个程序过于复杂


任何帮助都会很好。谢谢。

在学习C#时,你肯定已经深入到了最深处。根据您设置的问题标签,我假设您更多的是寻求网络方面的帮助,而不是直接的输入/输出问题。可以公平地说,无论你使用何种语言,建立人际网络都绝对不是一件小事。也许帮助您的最佳方式是向您指出一个示例的方向,该示例演示了您试图实现的内容,开源网络库的一个例子是聊天应用程序(只有11行)。如果您在查看后有任何问题,请告诉我。

您可以尝试使用异步操作,如
BeginRead()
,但这意味着使用
Stream
而不是
StreamReader


因此,我认为在您的情况下,是的,如果您创建了另一个线程,并在那里执行另一个阻塞调用,这将是最简单的。但是如果您这样做了,不要忘记同步对两个线程共享的任何资源的访问,可能是通过使用

仅供参考:您要寻找的是使用异步调用处理IO;您不需要非阻塞套接字。