ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-等待两个“用户输入”任务之一完成,中止另一个

2019-11-09 04:06:39  阅读:302  来源: 互联网

标签:user-input task fingerprint 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有