簡體   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