同时从两个源读取ReadLine()

本文关键字:两个 读取 ReadLine | 更新日期: 2023-09-27 18:15:37

这是我当前的循环。

while(!StartServer.HasExited)
{
    Console.WriteLine(StartServer.StandardOutput.ReadLine());
    StartServer.StandardInput.WriteLine(Console.ReadLine());
}

ServerStart是我的进程名。问题是循环在继续之前等待输入。有没有一种方法可以让我同时运行两个循环?这样的:

while(!StartServer.HasExited)
{
    Console.WriteLine(StartServer.StandardOutput.ReadLine());
}
while(!StartServer.HasExited)
{
    StartServer.StandardInput.WriteLine(Console.ReadLine());
}

同时从两个源读取ReadLine()

这样怎么样

Task t1 = null, t2 = null;
while(!StartServer.HasExited)
{
       if (t1 == null || t1.IsCompleted)
           t1= Task.Run(() =>  Console.WriteLine(StartServer.StandardOutput.ReadLine()));
       if (t2 == null || t2.IsCompleted)
           t2 = Task.Run(() => StartServer.StandardInput.WriteLine(Console.ReadLine()));
       Task.WaitAny(new[] { t1, t2 });
}

也许你甚至可以更聪明地只回收已经完成的任务。