![](/img/trans.png)
[英]How do I execute multiple Tasks using Task Parallel Library and return after the first one to actually return data
[英]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.