c# - c# - 我可以在向用户请求 ReadLine 时运行代码吗?
问题描述
我有一个在后台运行的循环。同时我需要程序来注册用户的输入,并让代码在任何输入发生时做出反应。我能以某种方式做到这一点吗?
所以从这样的片段中 -
string input = "";
while(true)
{
Console.WriteLine(input);
}
input = PermanentReadLine();
我希望它在我向 ReadLine 写入任何内容时更改它写入屏幕的内容
解决方案
您可以通过让一个任务读取输入和一个单独的任务来处理它来实现这一点。这是使用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”时终止。
推荐阅读
- javascript - 将字符串转换为字典 - Javascript
- javascript - ReferenceError:窗口未在 React 中定义
- typescript - 通用记录键可能吗?
- python - asyncpg 异常 DataError 查询参数的输入无效
- reactjs - 在 nextjs 中使用链接
- azure - 图形数据科学库不在 Azure Neo4j VM 中
- symfony - Symfony 5 Stripe Webhook 重定向 307
- javascript - Google App 脚本 - 映射时出错 - TypeError:无法读取未定义的属性“地图”
- .net - 如何在 .Net v 4 项目中安装 Dataflow 库?
- sql - SQL:如何在另一列中按 MAX 提取一行,在另一个列序列中提取 DISTINCT?