- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我希望我的主线程不被其他任何东西使用。我必须做一些我希望由不同线程完成的并行处理。为此,我使用 Parallel.For 如下
static void SomeMethod()
{
Console.WriteLine(string.Format("Main Thread ID before parallel loop ->>>>>>> {0} ", System.Threading.Thread.CurrentThread.ManagedThreadId));
Parallel.For(0, 10, i =>
{
Console.WriteLine(string.Format("Output ->>>>>>> {0} ", System.Threading.Thread.CurrentThread.ManagedThreadId));
});
Thread.Sleep(100);
Console.WriteLine(string.Format("Main Thread ID after parallel loop ->>>>>>> {0} ", System.Threading.Thread.CurrentThread.ManagedThreadId));
}
从输出中可以看出,主线程使用的是 ThreadID 1,Parallel.For 中的一些线程也使用相同的线程。
Main Thread ID before parallel loop ->>>>>>> 1
Output ->>>>>>> 1
Output ->>>>>>> 1
Output ->>>>>>> 3
Output ->>>>>>> 4
Output ->>>>>>> 4
Output ->>>>>>> 4
Output ->>>>>>> 4
Output ->>>>>>> 5
Output ->>>>>>> 3
Output ->>>>>>> 1
Main Thread ID after parallel loop ->>>>>>> 1
有什么方法可以确保 Parallel.For 中的任何内容始终在单独的线程上运行,以便主线程始终空闲。
最佳答案
Is there some way to make sure that anything in Parallel.For always run on separate thread so that main thread is always free.
Parallel.For
将始终阻塞,直到一切都完成 - 所以即使它没有在原始线程上做任何事情,线程仍然不会“免费”。
如果你想让主线程保持“空闲”,你可能想研究异步和等待 - 你可以使用 Task.Run
在异步方法中启动 10 个任务,然后 await
调用 Task.WhenAll
的结果。
或者,您仍然可以使用 Parallel.For
,但在任务中执行那个。例如:
Task task = Task.Run(() => Parallel.For(0, 10, i =>
{
Console.WriteLine("Output ->>>>>>> {0} ",
Thread.CurrentThread.ManagedThreadId);
}));
然后您可以等待那个任务。任务的“主线程”可能会在 Parallel.For
循环中使用,但这没关系,因为它仍然不是您的原始主线程,如果您明白我的意思的话。
关于c# - Parallel.For 不使用我的主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28253140/
有人可以向我澄清主线 DHT 规范中的声明吗? Upon inserting the first node into its routing table and when starting up th
我正在尝试使用 USB 小工具驱动程序使嵌入式设备作为 MTP 设备工作。 我知道 Android 从大容量存储设备切换到 MTP 设备已经有一段时间了,并且找到了 source code for M
我是一名优秀的程序员,十分优秀!