gpt4 book ai didi

c# - Parallel.Invoke 是否与调用多个 Task.Run 相同?

转载 作者:行者123 更新时间:2023-12-05 03:21:42 35 4
gpt4 key购买 nike

Task.Run :将指定的工作排入队列以在 ThreadPool 上运行并返回任务或 Task<TResult>处理这项工作。

Parallel.Invoke : 执行每个提供的操作,可能是并行的。

实际上,它们从线程池中启动了一个新线程。 Parallel.Invoke也是如此与调用多个 Task.Run 相同是吗?

最佳答案

所以你想比较这两种技术:

Parallel.Invoke(source.Select(source => () => ProcessItem(source)).ToArray());
Task.WaitAll(source.Select(source => Task.Run(() => ProcessItem(source))).ToArray());

一同两异。相似之处在于,在这两种情况下在 Parallel.Invoke/Task.WaitAll 返回之前,将调用并完成所有操作。某些操作是否失败并不重要。不支持快速失败策略。

这两个区别是:

  1. Parallel.Invoke使用当前线程作为工作线程之一。相反,Task.WaitAll+Task.Run 只使用 ThreadPool 线程。当工作线程工作时,当前线程被阻塞,什么都不做。

  2. Parallel.Invoke 可以配置特定的 MaxDegreeOfParallelismTaskSchedulerCancellationToken ( ParallelOptions)。这对于 Task.Run 是不可能的。 Task.Factory.StartNew可以,但相对来说比较麻烦。

关于c# - Parallel.Invoke 是否与调用多个 Task.Run 相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72892577/

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