gpt4 book ai didi

c# - 任务 WaitAny 条件

转载 作者:太空狗 更新时间:2023-10-29 23:46:15 26 4
gpt4 key购买 nike

我发现了一些使用 Task.WaitAny 条件的代码。

Task<int>[] tasks = new Task<int>[3];

tasks[0] = Task.Run(() => { Thread.Sleep(2000); return 1; });
tasks[1] = Task.Run(() => { Thread.Sleep(1000); return 2; });
tasks[2] = Task.Run(() => { Thread.Sleep(3000); return 3; });

while (tasks.Length > 0) {
int i = Task.WaitAny(tasks);
Task<int> completedTask = tasks[i];

Console.WriteLine(completedTask.Result);

var temp = tasks.ToList();
temp.RemoveAt(i);
tasks = temp.ToArray();
}

代码运行良好,结果为 2 1 3。

当我试图改变 sleep 间隔时

tasks[0] = Task.Run(() => { Thread.Sleep(2000); return 1; });
tasks[1] = Task.Run(() => { Thread.Sleep(1000); return 2; });
tasks[2] = Task.Run(() => { Thread.Sleep(1000); return 3; });

while (tasks.Length > 0) {
int i = Task.WaitAny(tasks);
Task<int> completedTask = tasks[i];

Console.WriteLine(completedTask.Result);

var temp = tasks.ToList();
temp.RemoveAt(i);
tasks = temp.ToArray();
}

我得到了 1 2 3,尽管第二个任务是 sleep 时间最短的任务,应该是第一个被删除的任务。

引擎盖下发生了什么?

最佳答案

Thread.Sleep 在暂停程序指定的毫秒数方面相当准确。

Thread.Sleep(1000) 表示任务将在 1000 毫秒后可执行。

但是在所有可用任务中先执行哪个任务是由任务调度器决定的,它根据线程池中的线程数和许多其他因素来决定任务的执行顺序。

关于c# - 任务 WaitAny 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19247410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com