繁体   English   中英

一旦第一个任务返回true,如何运行多个任务并返回结果

[英]How to run multiple tasks and return the result once the first task returned true

如何编写一种异步运行某些任务的方法,检查给定任务的结果,并且一旦任务返回true ,该方法必须停止执行并返回结果。

假设我们得到了以下功能:

private static async Task<bool> DummyFunction()
{
    Random rand = new Random(DateTime.Now.Millisecond);
    Thread.Sleep(rand.Next(1000, 10000));
    return await Task.FromResult(rand.Next(100) % 2 == 0);
}

接下来的一个将调用DummyFunction

private async Task<bool> RunDummy()
{
    List<Task<bool>> tasks = new List<Task<bool>> { DummyFunction(), DummyFunction(), DummyFunction() };
    while (tasks.Any())
    {
        Task<bool> currentTask = await Task.WhenAny(tasks);
        if (await currentTask)
        {
            // do something ..., raise an event, call another method or whatever
            // or simply just return
            return true;
        }
        tasks.Remove(currentTask);
    }
    return false;
}

我在stackoverflow的某处找到了RunDummy的代码。 但它宁可同步运行。 我尝试调试它,并注意到它在开始下一个任务之前等待每个任务完成。

我的问题是,如何并行运行所有任务并在返回true第一个方法处停止执行?

使用Task.WhenAny 您的问题不是RunDummy

RunDummy等待所有任务完成的原因是DummyFunction并非真正异步。 Thread.Sleep(rand.Next(1000, 10000)); 实际上挂起线程。 请参阅Thread.Sleep 文档 -'将当前线程挂起指定的毫秒数'。

要使DummyFunction异步,请使用await Task.Delay(1000)

还有一件事- await Task.FromResult(rand.Next(100) % 2 == 0)的行也不是异步的。 Task.FromResult创建完成的Task然后等待完成的任务同步返回该值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM