问题标签 [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 投票
2 回答
36724 浏览

c# - BackgroundWorker 的任务并行库替换?

任务并行库是否有任何可以被视为对 BackgroundWorker 类的替代或改进的东西?

我有一个带有向导式 UI 的 WinForms 应用程序,它执行一些长时间运行的任务。我希望能够拥有一个带有标准进度条和取消操作能力的响应式 UI。我以前用 BackgroundWorker 做过这个,但我想知道是否有一些 TPL 模式可以用来代替?

0 投票
1 回答
722 浏览

c# - 为什么调试与不调试(取消任务)运行不同?

我编写了一个程序来测试 C# 4.0 中的并行编程。但是,有一个问题,我不知道为什么。

我写了一个方法

它在单独的线程(UI线程除外)上运行。

和功能(简化)

问题是,当tokenSource被取消时,会出现“OperationCanceledException is nothandled by user code”的错误,就好像catch块不存在一样。我不知道为什么,因为我的代码类似于教科书和 MSDN 中的代码。

谢谢你。

编辑:实际上我在不到一个月前写了一个类似的程序,那时一切都很好。今天我再次尝试运行它,同样的问题发生了。我在完成程序后安装了 Microsoft Visual Web Developer 2010 Express,不知道是不是这个原因。我不明白,相同的代码,不同的结果。

编辑:我想到了这个问题,发现哪里错了。过去,我使用“不调试运行”,而现在使用调试。在不调试的情况下运行可以解决问题。如果有人告诉我为什么调试与“无调试运行”不同,我将不胜感激。

0 投票
2 回答
610 浏览

.net - 任务并行库周围是否有接口包装器,以便我可以将其换出以进行单元测试?

我前段时间问过这个问题。我现在知道这是一个坏主意,并且应该抽象封装任务的调度和运行,以便可以从单元测试中传入同步调度程序。

我目前有使用任务并行库(TPL)的代码,我想ITaskScheduler在我的类型中注入类似的东西来提取调度的责任,并使我能够在我的测试中传递一个同步的替代方案。

这样的事情存在吗?我正在寻找可以包装Task.Factory.StartNewTask.ContinueWith. 我不认为自己动手做的工作量不大,但我敢肯定有很多小问题,如果已经有一个,我真的不想花时间去做。

0 投票
3 回答
1793 浏览

multithreading - 有没有办法限制任务并行库使用的线程?

我正在使用 TPL,但我发现使用它的单元测试代码很棘手。

我试图不引入包装器,因为我觉得它可能会引入问题。

我知道您可以在 TPL 中设置处理器关联,但真正好的是设置线程最大值(可能每个应用程序域)。因此,当将线程最大值设置为 1 时,TPL 将被迫使用它所使用的任何线程。

你怎么看?这可能吗(我很确定不是),应该可能吗?

编辑:这是一个例子

除非我引入延迟,否则测试可能不会通过。我想要这样的东西,Task.MaximumThreads=1以便 TPL 可以串行运行。

0 投票
1 回答
1375 浏览

visual-studio-2010 - 在 Visual Studio 2010 RTM 中看不到并行任务窗口

并行任务窗口应位于 Visual Studio 中的“调试”>“窗口”下。但是,我在那里只看到“断点”。我错过了什么吗?

0 投票
2 回答
217 浏览

c# - 使用任务并行库实现“仅一个”和“不并行”语义

使用以下操作的 KEY 实施任务的最佳方法是什么:-

选项 1) 只有一个密钥是未决的。例如,可用于从 ASP.NET MVC 为缩略图图像排队单个渲染,无论图像 Url 被点击多少次。只有一个运行,所有其他请求等待那个完成。

选项 2) 具有相同键的所有项目必须按顺序执行。例如,可用于确保从后备存储获取文件到本地缓存的操作不会同时尝试将文件获取到缓存。选项 1 是一种特殊情况,其中具有相同键的后续操作被简单地丢弃(通常只保存文件存在检查)。

我有一个现有的 WorkQueue 可以处理这两种情况(以及 Apartment 状态、ThreadPriority 设置和最大并行度)。TPL 似乎是替代它的最佳解决方案,并将带来改进的取消选项。

带有延续的嵌套任务看起来很有希望,但维护当前排队任务的字典很快就会在 TaskFactory 和 TaskScheduler 类之间变得混乱。从 Task 继承也是有问题的,因为 TaskFactory 和 TaskScheduler 在 Task 上都不是通用的。

大多数任务并行示例假设任务集是提前知道的。在这种情况下,新任务一直被添加,需要根据请求的操作和传入的密钥被丢弃或链接到现有任务上。

有没有人使用 TPL 实现过类似的东西,如果有,你在 Task、TaskScheduler 和 TaskFactory 类中采用了什么方法?

0 投票
3 回答
5253 浏览

c# - 如何在 .NET 4 中将异步操作与任务并行库链接?

我正在尝试以编程方式链接 C#4 中的异步操作,例如写入给定的 Stream 对象。我最初是“手动”执行此操作的,将回调从一个操作挂钩到下一个操作,但我想我会尝试使用 .NET 4 任务并行库来省去重新发明并发轮子的麻烦。

首先,我将异步调用包装在 Tasks 中,如下所示:

延续使链接同步操作变得非常容易(如果您原谅不幸的方法名称):

但是没有任何版本的Task.ContinueWith方法可以像TaskFactory.FromAsync.

因此,假设我坚持使用 TPL,我正在寻找此方法的正确实现:

0 投票
1 回答
8553 浏览

.net - 使用 .NET 4.0 中的任务并行库等待所有任务完成

是否有更短的方法来等待多个线程完成?也许使用 ContinueWhenAll... 但我不想异步运行其余代码。

0 投票
1 回答
493 浏览

c - 使用 TPL 在结构中序列化 wchar_t*

我正在尝试使用 tpl 序列化包含 wchar_t* 字符串的结构。

我的代码看起来像这样,但它不起作用:

如果我用“1234”替换中文“字符串”字符串,它只会打印“1”——如果我更改定义以便结构用户使用 char*(并且我只将 ASCII 字符推入其中),它就可以正常工作。但是我不知道如何让它正确地序列化和反序列化 wchar_t* 字符串。

0 投票
3 回答
9259 浏览

c# - 重新启动任务还是创建新任务?

我正在开发一个每 30~80 秒创建 20~50 个新任务的项目。每个任务的生存时间为 10~20 秒。

所以我使用计时器来创建这些新任务,但每次我总是重新创建相同的任务时,代码是这样的:

我的问题是,有任何方法可以创建任务并继续重新启动它,所以我不需要启动新任务Task.Factory.StartNew(service.Execute); 每次?

或者那是我不必担心的事情,并且可以继续创建新任务?

关于我应该如何使用这种线程在这种情况下工作的任何指南/最佳实践?