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

c# - 是否有一种有效的方法可以将 System.Threading.Tasks 与 WCF 服务代理一起使用?

在阅读了最近一篇关于任务调度程序的 MSDN 杂志文章后,我希望(并且实际上非常兴奋)使用它会有益于我使用 WCF 生成的代理。

我希望获得以下一些好处:

  • 1)能够中止正在运行的 WCF 操作(我不希望这会停止服务器上的操作 - 我只是希望能够发出信号'我不想要此任务的结果'。这是在 UI 中尤其常见,其中有人从触发服务调用的网格中重复选择项目。)
  • 2) 能够在创建任务之外的某个时间点启动任务——我不确定我是否真的需要这个,我只是认为生成一个任务而不是立即运行它可能会很好。毕竟我认为这就是任务的全部意义所在。
  • 3) 可绑定属性——因此我可以将我的 WCF UI 绑定到IsCompleted并让 Task 类从我的 UI 中抽象出操作的内部结构。
  • 4)能够抽象出操作的运行- 模拟,等等等等,未来的重构等。

但是 - 我似乎没有得到任何这些好处。

  • 1)Task 中没有中止功能——这让我觉得很奇怪。
  • 2)我可以使用的唯一重载Task.Factory.FromAsync<>是下面显示的重载。这会立即开始执行 web 服务操作(如 Fiddler 中所示),并且不允许我稍后开始调用。
  • 3) 任务没有实现INotifyPropertyChanged,所以我无法将它绑定到 UI。
  • 4)鉴于其他3个好处没有发生,这个有点死在水中:-(

Sooo .... 我只是在浪费时间试图让 WCF 生成的代理与任务一起工作——还是我错过了一些东西。

0 投票
2 回答
11693 浏览

c# - 是否可以在执行 Parallel.ForEach 期间更改 parallelOptions.MaxDegreeOfParallelism

我正在运行一个多线程循环:

我想在并行循环执行期间更改 parallelOptions.MaxDegreeOfParallelism 以减少或增加线程数。

它似乎没有增加线程。有没有人有任何想法?

0 投票
4 回答
56665 浏览

c# - 任务构造函数中的取消标记:为什么?

某些System.Threading.Tasks.Task构造函数将 aCancellationToken作为参数:

令我感到困惑的是,无法从方法主体内部实际获取传入的令牌(例如,没有类似的Task.CurrentTask.CancellationToken)。令牌必须通过其他机制提供,例如状态对象或在 lambda 中捕获。

那么在构造函数中提供取消令牌的目的是什么?

0 投票
3 回答
8257 浏览

c#-4.0 - Parallel.Invoke - 异常处理

我的代码运行 4 个函数来将信息(使用调用)填充到一个类中,例如:

我的问题是:如果他不是素食者,我不能返回 null,但我希望能够停止所有线程,停止处理并返回 null。如何实现?

0 投票
3 回答
30613 浏览

c# - 不在 TPL Task 对象上调用 Dispose() 是否可以接受?

我想触发一个任务在后台线程上运行。我不想等待任务完成。

在 .net 3.5 中,我会这样做:

在 .net 4 中,TPL 是建议的方式。我见过推荐的常见模式是:

但是,该StartNew()方法返回一个Task实现IDisposable. 推荐这种模式的人似乎忽略了这一点。该Task.Dispose()方法的 MSDN 文档说:

“在发布对任务的最后引用之前,请始终调用 Dispose。”

在任务完成之前,您不能对任务调用 dispose,因此让主线程等待并调用 dispose 将首先破坏在后台线程上执行的点。似乎也没有任何已完成/已完成的事件可用于清理。

Task 类的 MSDN 页面对此没有评论,《Pro C#2010...》一书推荐了相同的模式,对任务处理也没有评论。

我知道如果我只是离开它,终结器最终会抓住它,但是当我做很多火和忘记这样的任务并且终结器线程不堪重负时,这会回来咬我吗?

所以我的问题是:

  • Dispose()在这种情况下不去上课是否可以接受Task?如果是这样,为什么以及是否存在风险/后果?
  • 有没有讨论这个的文档?
  • 或者是否有适当的方法来处理Task我错过的对象?
  • 还是有另一种使用 TPL 执行“开火即忘”任务的方法?
0 投票
4 回答
3172 浏览

c# - Backgroundworker 和 TPL 的 Task 有相同的 ManagedThreadID?

我有一个 Backgroundworker,其目的是在后台按顺序运行作业。现在一项工作以多线程方式实现。这意味着,Backgroundworker 将创建多个线程。我使用任务并行库,所以我使用 Task.Factory.StartNew 创建多个任务。

任务运行后,Backgroundworker 等待所有任务完成。

现在我打印 Backgroundworker 的 ManagedThreadID 和所有任务的 ManagedThreadID。我发现BackgroundWorker的ManagedThreadID总是和第一个任务的ManagedThreadID一样。我认为这不应该发生,所以我无法解释。我认为 Backgroundworker 的线程必须与其创建的所有任务不同,因此 ManagedThreadID 必须彼此不同。

谁能解释为什么会发生这种情况?非常感谢你。

编辑:

代码与此类似:

您会发现其中一项任务与 Backgroundworker 具有相同的 ManagedThreadID。

0 投票
1 回答
410 浏览

.net-4.0 - 使用 .Net 4.0 新功能进行并行任务

我之前问过一个关于设计接收视频文件的服务的问题,将它们发送到编码服务,等待编码完成,然后下载文件。

我开始为此编写代码,我的一位同事建议我使用 .Net 4.0 的新功能,而不是使用 BackgroundWorker 编写它。我做了一些阅读,并行功能听起来很棒。我应该实现更多新功能吗?我是.net 4.0 的新手。

谢谢!

0 投票
4 回答
1136 浏览

.net - TPL 与 InvokeRequired/Invoke

从 .NET 4.0 开始,就有了执行异步任务的 TPL。如果您正在阅读 msdn,所有与表单/UI 交互的异步操作仍然使用 InvokeRequire ... Invoke() 模式。我要问的是这有原因吗?据我所知,TPL 应该是旧线程机制的替代品。那么在涉及 UI 线程时忽略它有什么意义呢?对此有什么想法吗?

0 投票
2 回答
1132 浏览

c# - 是否有机会用 TPL 替换 while 循环?

我有两个 while 循环,我将与 TPL 并行运行。

我的代码:

如果我能安全地取消这两个动作,那就太好了。你能给我一些建议吗?

提前致谢。

亲切的问候,亲

0 投票
1 回答
398 浏览

c# - 是否有 CHESS 的替代方法来测试使用任务并行库编写的程序

我正在寻找一种工具,它允许我使用使用任务并行库结构编写的程序对所有可能的交错(拼写?)执行单元测试。或者,我如何使用 dotNET 4.0 运行 CHESS?