- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用带有以下代码的 PLINQ:
static void Main(string[] args)
{
var lt = new List<int>() {1,2,3,4,5};
try
{
var nlt = lt.AsParallel().Select(Test).ToList();
}
catch (AggregateException e)
{
foreach (var ex in e.InnerExceptions)
{
Console.WriteLine(ex.Message);
}
}
}
private static bool Test(int n)
{
if (n == 1)
{
Thread.Sleep(1000);
}
if (n == 3)
{
Thread.Sleep(3000);
}
if (n == 5)
{
Thread.Sleep(5000);
}
if (n == 2 || n == 4)
{
throw new Exception("New exception");
}
Console.WriteLine("element : {0}", n);
return true;
}
结果是 aggregateException 总是在 5 秒后抛出(直到最后一个线程完成)。似乎如果某些线程抛出异常,其余线程仍将继续运行。在最后一个线程完成后,框架会聚合所有异常并将它们包装在 aggregateException 中。
如果10个线程中有3个抛出异常,它会等待其余7个线程完成并在最后抛出aggreagteException,这是框架行为吗。
然而,当我看到这份文件时: https://msdn.microsoft.com/en-us/library/dd460712(v=vs.110).aspx
the query cannot continue after the exception is thrown. By the time your application code catches the exception, PLINQ has already stopped the query on all threads.
我想知道为什么我的代码不以这种方式运行?如果抛出异常后无法继续查询,则不会永远打印元素 1、3、5,因为异常已经抛出。
最佳答案
从您提供的链接:
When exceptions are allowed to bubble up back to the joining thread, then it is possible that a query may continue to process some items after the exception is raised.
This section albahari 的文章更好地解释了正在发生的事情:
Both PLINQ and the Parallel class end the query or loop execution upon encountering the first exception — by not processing any further elements or loop bodies. More exceptions might be thrown, however, before the current cycle is complete. The first exception in AggregateException is visible in the InnerException property.
当抛出异常时,将不再处理集合中的更多值。但是,在抛出异常时,方法 Test(int)
已经为所有 5 个整数调用了。在这种情况下,PLINQ 将等待这些方法调用(当前周期),并在所有方法调用完成后抛出 AggregateException
。
关于c# - PLINQ 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32430134/
假设我有一个 DataTable。 var dt = getDataTable(); 然后我做 Parallel.For (0, dt.Rows.Count, i => Foo (dt.Rows[i]
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
对不起我的英语不好。所以,这是我的问题 我正在尝试通过 PLINQ 更新 DataTable 这是我的代码 DataTable table = new DataTable(); table.Colum
据我了解: Programming to leverage multicores or multiple processors is called parallel programming. 但是如果
我想对数据流执行查询,同时以一定程度的并行性并行处理项目。通常,我会使用 PLINQ,但我的工作项不受 CPU 限制,而是 IO 限制。我想使用异步IO。 PLINQ 不支持异步工作。 使用异步工作项
据我了解: Programming to leverage multicores or multiple processors is called parallel programming. 但是如果
在MSDN据说 PLINQ 不保留顺序。我想在我的项目中演示它,但我有一个问题,那就是始终保持秩序。我有一个收藏List> table这些是我的疑问: var linqQuery = table
我对 Plinq 和 Repo 模式还很陌生。我需要您提供一些引用资料和指南,以便在 fx 4.0 中使用 dbml、PLinq 实现存储库模式 最佳答案 存储库模式为您提供了对数据存储的抽象。如果带
假设您正在查询具有一百万条记录的集合,当您只有一个 CORE 处理器时,PLINQ 的性能是否与普通的 LINQ 查询有任何不同。 我知道 PLINQ 在多核处理器上工作得很好。只是想了解它在单个核心
我正在使用带有以下代码的 PLINQ: static void Main(string[] args) { var lt = new List() {1,2,3,4,5};
我正在尝试实现 PLINQ 示例但面临以下问题我的顺序查询比并行查询执行得更快。 这里是代码示例: Stopwatch sw = new Stopwatch(); in
下面是我在 Windows 服务中定期运行的示例 PLINQ 查询: var resultList = new List>(); try { resultList = emailsToSend
我写了一个 LINQ 来找出文本文件中唯一字符的频率。我还在 select 的帮助下将我的初始结果转换为一个对象。最终结果以列表的形式出现。以下是我使用的查询。 charNodes = inputSt
PLINQ 是否保证按照原始序列被操作的顺序返回查询结果,即使结果是并行产生的?例如: new List(){"a", "b", "c", "d"}.asParallel().Select(str =
许多自定义 Enumerable 扩展可以根据其他内置操作来实现 - 例如这个简单的便捷方法: public static bool AnyOf(this TElement item, IEnumer
我正在运行一个 PLINQ 查询,如下所示: ParallelQuery winningCombos = from n in nextComboMaker.GetNextCombo()
我遇到过静态构造函数中的以下 plinq 语句陷入僵局的情况: static void Main(string[] args) { new Blah(); } class Blah {
最近我对 Linq 和 Plinq 做了一些测量。我看不出 Plinq 在哪种情况下具有真正显着的优势。 我发现了很多例子,例如: Enumerable.Range(0, 10000).AsParal
PLINQ 作为 LINQ 的扩展被添加到 .NET 4.0 Framework 中。 这是什么? 它解决了什么问题? 什么时候合适,什么时候不合适? 最佳答案 这是并行 LINQ。这是一种在多核/多
产品中(基于ASP.NET MVC开发)需要经常对药品名称及名称拼音码进行下拉匹配及结果查询。为了加快查询的速度,所以我最开始就将其加入内存中(大约有六万五千条数据)。 下面附实体类。
我是一名优秀的程序员,十分优秀!