编程语言
首页 > 编程语言> > c#-等待两个“用户输入”任务之一完成,中止另一个

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;
}

解决方法:

CancellationTokenSourceTask.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