这是一个控制台应用程序。
//伪代码
While loop{
UpdateData() ;
PrintData() ;
Wait(update Interval) ;
}
当按下按钮时,我需要循环和Wait()来中断/返回。 但是等待不能阻止监听按键。
我认为异步等待可以解决此问题,但使用Timer类可能更好?
我正在寻找解决这种情况的当前最佳实践。
这是我目前的代码,但是我很确定这不是路要走,而且似乎会影响到主线程。我的想法是,在异步PrintUser循环完成之前,此StatMonitor方法不应该完成。
public async void StartMonitor()
{
var cancellationTokenSource = new CancellationTokenSource();
var keyboardListenTask = Task.Run(() =>
{
var key = Console.ReadKey();
cancellationTokenSource.Cancel(false);
}, cancellationTokenSource.Token);
while (!cancellationTokenSource.IsCancellationRequested)
{
var userActor = ChooseUserActor();
while (!cancellationTokenSource.IsCancellationRequested)
{
PrintUser(userActor);
Console.WriteLine("Any key to go back...");
try
{
await Task.Delay(1000, cancellationTokenSource.Token);
}
catch (Exception) { }
}
};
}
答案 0 :(得分:1)
我正在寻找一种处理这种情况的当前最佳实践。
如果要在等待用户输入时定期刷新显示,则将刷新放在Timer
中,然后以常规方式等待用户输入(在主线程上调用Console.ReadKey()
)。 / p>
尽管您可以使用async
/ await
,Task.Delay
和CancellationToken
s来构建替代解决方案,但这只会增加复杂性,而没有真正的好处。