问题标签 [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 回答
25911 浏览

.net - 我可以在 .Net 3.5 项目中使用任务并行库吗?

我听说 Task Parallel Library 可以在 .Net 3.5 项目中使用。这是正确的,如果是,我该如何使用它?在 .Net 4.0 中,它驻留在 System.Threading 中,但是当我在 Visual Studio 2010 中选择 .Net 3.5 作为目标时,我无法访问 Parallel 和 Parallel 循环等类。

0 投票
2 回答
2553 浏览

c# - 执行并行分解时溢出异常

我正在尝试编写一个不太智能的分解程序并尝试使用 TPL 并行执行。但是,在 core 2 duo 机器上运行大约 15 分钟后,我得到了一个聚合异常,其中包含一个溢出异常。堆栈跟踪中的所有条目都是 .NET 框架的一部分,溢出不是来自我的代码。在弄清楚为什么会发生这种情况时,我们将不胜感激。

这是注释代码,希望它足够简单易懂:

这是抛出的异常:

任何帮助,将不胜感激。

谢谢!

编辑

按照 Simon 的回复,我再次运行代码,这次使用了一个catch(AggregateException x)子句,并检查了InnerExceptions集合中的所有元素。正好有 2 个元素(我假设每个执行线程都有一个元素,因为我有 2 个 CPU 内核,TPL 将优化为仅使用 2 个线程)。两个例外都是相同的(都是OverflowException)......所以这不是答案。

解决方案

Henk 的回答被证明是正确的,这是来自微软博客的半官方链接,证实了这一点:PLINQ Beta 2 中的新增功能

0 投票
4 回答
3869 浏览

c# - 并行任务库 WaitAny Design

我刚刚开始探索 PTL 并有一个设计问题。

我的场景:我有一个 URL 列表,每个 URL 都引用一个图像。我希望并行下载每个图像。至少下载一个图像后,我想执行一个对下载的图像执行某些操作的方法。该方法不应该被并行化——它应该是串行的。

我认为以下方法可行,但我不确定这是否是正确的方法。因为我有单独的类来收集图像和对收集的图像做“某事”,所以我最终传递了一系列似乎错误的任务,因为它暴露了如何检索图像的内部工作原理。但我不知道有什么办法。实际上,这两种方法都有更多内容,但这并不重要。只要知道它们真的不应该被归为一种既可以检索图像又可以对图像进行处理的大型方法。

0 投票
3 回答
1397 浏览

c# - 使用 TPL 和异步模式之间的实际区别

我正在研究使用上述任何一种方法来处理长期运行的操作。

我不会详细介绍使用这些方法可以完成什么,但我宁愿解释我想要做什么。

我有一组与 HTTP 相关的方法,每个方法都检索一些信息。这都是长期运行服务内部更大系统的一部分(所以它不是一些一次性的、丢弃的代码)。

一般来说,哪种方法更好,封装和可维护性更好:使用 Begin/End/AsyncCallback 机制处理返回的数据,或者通过从任务中触发事件,如 OnXXXReceived、OnXXXError,使用派生的 EventArgs 类为每个事件?

我希望我已经足够清楚了。我决定不提供代码示例,因为我对意见、建议和可能的陷阱更感兴趣,而不是对具体实现的花絮。

谢谢!

0 投票
2 回答
12740 浏览

c# - 有没有办法将任务并行库(TPL)与 SQLDataReader 一起使用?

我喜欢 TPL 中 Parallel.For 和 Parallel.ForEach 扩展方法的简单性。我想知道是否有办法利用类似的东西,甚至是稍微高级一点的任务。

下面是 SqlDataReader 的典型用法,我想知道它是否可行,如果可行,如何用 TPL 中的内容替换下面的 while 循环。因为读者不能提供固定数量的迭代,所以 For 扩展方法是不可能的,这让我不得不处理我收集的任务。我希望有人可能已经解决了这个问题,并通过 ADO.net 制定了一些注意事项。

0 投票
2 回答
12112 浏览

c# - TaskCreationOptions.LongRunning 选项和 ThreadPool

TPL 使用任务计划程序来协调任务。根据官方文档,默认任务调度程序使用线程池,但如果TaskCreationOptions.LongRunning提供选项,它将为该任务创建一个专用线程(A)。

问:截至目前,Visual Studio 2010 的 MSDN 文档还没有准备好,当前的在线 MSDN 还没有最终确定;有谁知道(A)是真的还是假的?

0 投票
2 回答
1525 浏览

visual-c++ - 在多台 PC 上运行单个程序的任何 C++ 库(即“使用网格计算运行我的应用程序”)

我正在寻求一种将单个程序转换为在网络上的多台计算机上运行的方法(想想“网格计算”)。

我正在使用 MSVC 2007 和 C++(非 .NET)。

我编写的程序非常适合并行编程(它对科学数据进行分析),因此计算机越多越好。

0 投票
2 回答
2115 浏览

c# - 使用这种异步日志记录代码有什么缺点?

我刚刚写的一些代码如下。

它演示了将 PostSharp aspect 应用于方法,以便以异步方式记录方法调用的持续时间 - 因此,如果日志记录过程很慢,则使用该 aspect 装饰的方法的调用者不会看到这种性能损失.

它似乎可以工作,随着 MyFirstMethod 的完成,日志记录方法在一个单独的线程中启动,并且 MySecondMethod 并行运行。这个想法是在一个非常高流量的 Web 应用程序(即一个高度多线程的环境)中的方法用类似的工具来装饰。

这样做的陷阱是什么?(例如,我担心在任何给定时间达到允许的线程数限制)。

0 投票
3 回答
10642 浏览

c# - 我希望任务处理抛出的任何异常,但发现很难阻止它们到达父级

我正在开发 .NET 4.0 中的Web Hook,它将异步运行 lambda,然后在完成后将结果发布到给定的 URI。

我已经让它工作了,但现在我希望 Task 处理抛出的任何异常,并且发现很难阻止它们到达父级。

这是我的代码的一部分:

我尝试过调用ContinueWith()两次以注册一个 continuation to runOnlyOnRanToCompletion和一个 to run的替代版本OnlyOnFaulted。(我不确定调用ContinueWith()两次是否正确。):

所以基本上我想要一种方法让每个任务通过延续函数处理自己的异常。就目前而言,在上述任何一个示例中都不会调用 HandlException 延续函数。

我在测试用例中引起了异常,我应该提到我正在Tasks.WaitAll(tasks);对一组任务进行调用以确保在做出断言之前所有任务都已完成,并且我不确定该调用是否有所作为任务如何处理异常。当前,WaitAll 抛出一个 AggregationException,它聚合每个任务的异常,因为它们没有被 HandleException 延续函数处理。

0 投票
3 回答
7128 浏览

c# - 使用嵌套的 Parallel.For

考虑这个例子:

打印 x 时,我们总是得到 4950。如果我想并行化这个怎么办?

这就是我想出的

但是,这不会在我每次运行时打印 4950。为什么?