问题标签 [task-parallel-library]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
12324 浏览

c# - 在同一个列表上嵌套 Parallel.ForEach 循环?

我需要并行化一种方法,该方法对列表中的元素进行详尽的成对比较。串行实现很简单:

在这种情况下, foo 不会改变 element1 或 element2 的状态。我知道简单地做嵌套的 Parallel.ForEach 语句是不安全的:

使用并行任务库实现这一点的理想方法是什么?

0 投票
3 回答
18070 浏览

c# - TaskScheduler.UnobservedTaskException 事件处理程序永远不会被触发

我正在阅读一本关于 C# 任务并行库的书,并有以下示例,但从未触发 TaskScheduler.UnobservedTaskException 处理程序。谁能给我任何关于为什么的线索?

0 投票
2 回答
1120 浏览

c# - 在 PLINQ 中取消长时间运行的任务

我正在尝试使用 NET 4.0 并行任务库来处理多个 FTS 查询。如果查询花费了太多时间,我想取消它并继续处理其余的。

当一个查询超过阈值时,此代码不会停止。我想我这样称呼它是为了整个过程而不是单个事务达到取消任务和时间限制。如果我将时间段设置得非常小(300 毫秒),那么所有搜索字符串都会调用它。

我想我错过了一些明显的东西..提前感谢您的任何见解。

此外,这似乎仍然无法阻止非常长的查询执行。这甚至是在触发长时间运行的查询后取消它的正确方法吗?

修改后的代码:

0 投票
2 回答
813 浏览

.net-4.0 - 任务并行库。嵌套任务不启动

我正在使用 .NET 新的 TPL 库,遇到了一些我无法解释的奇怪行为。由于某种原因,在我的情况下没有启动嵌套任务。我已将解决方案简化为以下内容:

我有 5 个同时运行的任务。每个任务从待处理队列中检索一些元素,执行一些操作,然后尝试运行嵌套任务以获得该操作的结果。问题是如果元素太多(while(true) 模拟这个)并且所有 5 个任务都在不断运行,嵌套任务不会启动。只能在大多数带有 while 循环的任务完成执行后才能启动。

阻止嵌套任务运行的 while 语句似乎有问题,但我不知道是什么:)

0 投票
2 回答
6301 浏览

c# - 在 C# 4.0 中继承任务类

我正在尝试安排一个工作单元在后台处理,并产生结果。最初我正在考虑扩展 Task 类,并安排自定义任务的该实例。(从 Java 中考虑 Future 和 Runnable)每个任务都封装了多个用于输入/输出的属性。多个任务同时处理,并且是完全自主的。

但是,我找不到任何这样做的例子,所以我开始怀疑这是正确的方法。有人可以提供使用 System.Threading.Tasks 正确执行此操作的示例

0 投票
1 回答
1683 浏览

c# - 为什么 Parallel.Invoke 无法完成所有操作?

我在教科书中编写了一个关于 C# 并行编程的示例。书中建议 Parallel.Invoke 可以代替任务的创建、调用和等待。但是,我尝试并发现如果我使用 Parallel.Invoke,任务在返回值之前不会完成。但理论上,Parallel.Invoke 应该一直等待。

编码:

以及执行功能的方式:

private void generateGraphData(byte[] data, int partitionStart, int partitionEnd)是一个填充数据数组的函数,从 partitionStart 到 partitionEnd。

如果我运行程序,只有部分数组被填充。但是如果我将 Invoke 替换为

程序按预期运行(数组已满)。

这里可能有什么问题?

提前致谢。

0 投票
3 回答
4512 浏览

c# - 跟踪多步骤任务的进度

我正在开发一个向客户端公开 Web 服务的简单服务器。一些请求可能需要很长时间才能完成,并且在逻辑上分为多个步骤。对于此类请求,需要在执行过程中报告进度。此外,新请求可能会在前一个请求完成之前发起,并且要求两者同时执行(除非某些系统特定的限制)。

我正在考虑让服务器向其客户端返回一个 TaskId,并让客户端使用 TaskId 跟踪请求的进度。我认为这是一个很好的方法,剩下的问题是如何管理任务。

从未使用过 TPL,我认为这将是解决此问题的好方法。事实上,它允许我同时运行多个任务,而无需手动管理线程。我什至可以使用 ContinueWith 相对轻松地创建多步骤任务。

不过,我想不出一个跟踪任务进度的好方法。我意识到,当我的请求包含一个“步骤”时,该步骤必须合作报告其状态。这是我现在更愿意避免的事情。但是,当请求包含多个步骤时,我想知道当前正在执行哪个步骤并相应地报告进度。我能想出的唯一方法是非常烦人:

甚至这也不完美,因为我希望任务存储自己的进度,而不是让 UpdateProgress 更新某个已知位置。此外,它还有一个明显的缺点,即在添加新步骤时必须更改很多地方(因为现在进度是 33%、66%、100% 而不是 50%、100%)。

有没有人有好的解决方案?

谢谢!

0 投票
3 回答
2241 浏览

task-parallel-library - 任务并行库(或 PLINQ)是否考虑了其他进程?

特别是,我正在考虑使用 TPL 来启动(并等待)外部进程。在决定开始另一个任务(因此——在我的情况下——另一个外部进程)之前,TPL 是否会查看总机器负载(CPU 和 I/O)?

例如:

我有大约 100 个需要编码或转码的媒体文件(例如从 WAV 到 FLAC 或从 FLAC 到 MP3)。编码是通过启动一个外部进程(例如 FLAC.EXE 或 LAME.EXE)来完成的。每个文件大约需要 30 秒。每个进程主要受 CPU 限制,但其中有一些 I/O。我有 4 个内核,所以最坏的情况(通过管道将解码器转码到编码器)仍然只使用 2 个内核。我想做类似的事情:

这会启动 100 个任务(因此有 200 个外部进程竞争 CPU)吗?或者它会看到 CPU 很忙,一次只做 2-3 个?

0 投票
1 回答
1112 浏览

c#-2.0 - 是否可以在 C# 2.0 中使用任务并行库 (TPL)?

目前卡在 C# 2 中,使用 TPL 的并行优势仍然会很好......这可能吗?

0 投票
3 回答
118 浏览

c# - 并行化从数据库中检索、搜索和存储为 HTML 的内容

我有一个将 HTML 内容存储为二进制序列化 blob 的数据库表。我需要一一检索内容,在内容中查找某些关键字(并报告找到的匹配项),并将内容作为 HTML 文件保存到磁盘。我可以使用 Parallel.ForEach 将其并行化吗?这是一个好主意还是有更好的主意。

在此先感谢您的帮助, Ashish