同时从两个源读取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());
}
这样怎么样
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 });
}
也许你甚至可以更聪明地只回收已经完成的任务。