首页 > 解决方案 > c# - 我可以在向用户请求 ReadLine 时运行代码吗?

问题描述

我有一个在后台运行的循环。同时我需要程序来注册用户的输入,并让代码在任何输入发生时做出反应。我能以某种方式做到这一点吗?

所以从这样的片段中 -

string input = ""; 
while(true)
{
  Console.WriteLine(input);
}
input = PermanentReadLine();

我希望它在我向 ReadLine 写入任何内容时更改它写入屏幕的内容

标签: c#

解决方案


您可以通过让一个任务读取输入和一个单独的任务来处理它来实现这一点。这是使用Channels的实现:

async Task Main()
{
    var channel = Channel.CreateUnbounded<string>();
    var worker = Task.Run(async () =>
    {
        while (await channel.Reader.WaitToReadAsync())
            while (channel.Reader.TryRead(out var input))
                Console.WriteLine(input);
    });
    
    while (true)
    {
        var input = Console.ReadLine();
        if (input.Equals("exit", StringComparison.CurrentCultureIgnoreCase))
        {
            channel.Writer.Complete();
            break;
        }
        channel.Writer.TryWrite(input);
    }
}

此示例在用户键入“exit”时终止。


推荐阅读