作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序,它运行了很长时间没有问题,由于以下错误突然无法启动:
“该属性已经设置,无法修改。”
当我检查基本上类似于下面的代码片段的代码时,我看到在试图命名 Parallel.Invoke 中的第一个任务的行上抛出了异常
Thread.CurrentThread.Name = "Main Program Thread";
// Do some start up tasks in parallel
Parallel.Invoke(new ParallelOptions { MaxDegreeOfParallelism = 10 },
() =>
{
Thread.CurrentThread.Name = "First thread";
},
() =>
{
Thread.CurrentThread.Name = "Second thread";
});
...
很明显,原因肯定是主线程已经有了名字,第一个任务是在主线程而不是线程池线程上运行。
虽然我可以通过不在 Parallel.Invoke 中命名线程来解决这个问题,但我很好奇为什么这突然开始发生。通常情况下 Parallel.Invoke() 以前在线程池线程上运行它的所有任务并且由于某种原因不能再这样做了吗?什么可以触发这种事情?
我越看这段代码就越感到困惑,因为它曾经有效过。在我看来,这段代码应该总是抛出异常。
最佳答案
Parallel
通常在线程池上运行一些工作,在当前线程上运行一些工作,以免让它闲置。这并不能保证,所有工作都可以在当前线程上的池或上运行。
我不知道为池线程分配名称时会发生什么。它要么抛出,要么什么都不做,要么只工作一次。这些都不可取。
丢弃此代码。不要乱用你不拥有的线程。
您可以使用 LongRunning
任务选项来获取您可以配置的专用线程。
关于c# - 在 Parallel.Invoke 中命名线程会导致异常 "This property has already been set and cannot be modified.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31452298/
我是一名优秀的程序员,十分优秀!