这是我的主要功能:
var configKey = Task.Factory.StartNew(acceptConfig);
var devKey = Task.Factory.StartNew(acceptDevMode);
while (true)
{
doSomething();
if (configKey.IsCompleted)
{
getFirstChoice();
getSecondChoice();
getThirdChoice();
configKey = Task.Factory.StartNew(acceptConfig);
}
if (devKey.IsCompleted)
{
setDevPassword();
getFirstChoice();
getSecondChoice();
getThirdChoice();
devKey = Task.Factory.StartNew(acceptDevMode);
}
}
这些是我的功能:
private static void acceptConfig()
{
var key = Console.ReadKey(true);
while (key.Key != ConsoleKey.C)
{
key = Console.ReadKey(true);
}
}
private static void acceptDevMode()
{
var key = Console.ReadKey(true);
while (key.Key != ConsoleKey.D)
{
key = Console.ReadKey(true);
}
}
这些基本上是我的getChoice
功能:
var key = Console.ReadKey(true);
switch (key.Key)
{
case ConsoleKey.D1
...
这是我的setDevPassword()
功能:
private static void setDevPassword()
{
password = Convert.ToInt32(Console.ReadLine());
}
我的问题是,除了第一次按下Cor之外D,每隔一次用户必须按下该键两次才能让程序响应。在每个getChoice
功能中,用户需要按两次数字,当再次返回主 while 循环时,在第一次按下时单击C或D不执行任何操作 - 仅在第二次按下时。
该setDevPassword()
功能也是如此,除了用户必须在程序响应下一次按键之前按下按键两次。这意味着它比其他输入功能多一次按键(不做任何事情)。
我不确定这些 Tasks 和 IsCompleted 检查是否真的是我的好习惯,但它们是用户输入如此“滞后”的原因吗?为什么会这样?