gpt4 book ai didi

c# - 在 Parallel.Invoke 中命名线程会导致异常 "This property has already been set and cannot be modified."

转载 作者:行者123 更新时间:2023-11-30 12:43:30 25 4
gpt4 key购买 nike

我有一个应用程序,它运行了很长时间没有问题,由于以下错误突然无法启动:

“该属性已经设置,无法修改。”

当我检查基本上类似于下面的代码片段的代码时,我看到在试图命名 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com