C# 如何运行多个任务并在第一个任务返回true后返回结果

C# 如何运行多个任务并在第一个任务返回true后返回结果,c#,task,C#,Task,如何编写一个异步运行某些任务的方法,检查给定任务的结果,一旦任务返回true,该方法必须停止执行并返回结果 假设我们得到了这个函数: private static async Task<bool> DummyFunction() { Random rand = new Random(DateTime.Now.Millisecond); Thread.Sleep(rand.Next(1000, 10000)); return await Task.FromRes

如何编写一个异步运行某些任务的方法,检查给定任务的结果,一旦任务返回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);
}
我在stackoverflow的某个地方找到了RunDummy的代码。但它是同步运行的。我试着调试它,我注意到它在开始下一个任务之前等待每个任务完成

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

使用Task.WhenAny。你的问题不是RunDummy

RunDummy等待所有任务完成的原因是DummyFunction不是真正异步的。线Thread.Sleeprand.Next1000,10000;实际上挂起了线程。请参阅Thread.Sleep-“将当前线程挂起指定的毫秒数”

要使DummyFunction异步,请使用wait Task.Delay1000


还有一件事-行wait Task.FromResultrand.Next100%2==0也不是异步的。Task.FromResult创建一个已完成的任务,并等待一个已完成的任务同步返回值。

首先,不要使用阻塞线程;使用非阻塞wait Task.delays,这非常有意义。加油!
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;
}