c#-等待两个“用户输入”任务之一完成,中止另一个
作者:互联网
基本上,我需要等待两个输入.
>从指纹传感器接收指纹以进行身份验证
>接收用于取消指纹认证的用户密钥输入
这是我的函数,仅使用第一个输入,其中应包含两个输入:
public static bool Identify(out FingerId identity)
{
bool interrupted = false; // should be changed if user entered key and not finger
Console.Write("Enter any key to cancel. ");
// Should run along with "Console.ReadKey()"
FingerBio.Identify(_session, out Finger._identity);
identity = Finger._identity;
return interrupted;
}
解决方法:
将CancellationTokenSource
与Task.WhenAny
一起使用.
由于您的问题没有关于用户界面任务的大量详细信息,因此这里是具有模式一般意义的演示.
该演示使用Task.Run(…)模拟您的用户界面任务.第二个任务通过使用无限循环来模拟长时间运行的任务.当第一个任务完成时,我们将取消第二个任务.
https://dotnetfiddle.net/8usHLX
public class Program
{
public async Task Identify()
{
var cts = new CancellationTokenSource();
var token = cts.Token;
var task1 = Task.Run(async () => {
await Task.Delay(1000);
Console.WriteLine("Task1");
}, token);
var task2 = Task.Run(async () => {
while (true) {
Console.WriteLine("Task2");
await Task.Delay(1000);
}
}, token);
// When one of them completes, cancel the other.
// Try commenting out the cts.Cancel() to see what happens.
await Task.WhenAny(task1, task2);
cts.Cancel();
}
public static void Main()
{
var p = new Program();
p.Identify().GetAwaiter().GetResult();
Task.Delay(5000);
}
}
Main()方法的末尾具有Task.Delay(),以使程序运行足够长的时间,以使演示有意义.
标签:user-input,task,fingerprint,c 来源: https://codeday.me/bug/20191109/2011514.html