【发布时间】:2016-06-25 13:19:26
【问题描述】:
我有两种方法。一种方法包含 ThreadPool,而 ThreadPool 运行第二种方法。
代码如下:sn-p:
static void Main()
{
var processes = GetProcessCounter();
foreach (var process in processes)
{
var tmp = process;
ThreadPool.QueueUserWorkItem(WriteCounter, tmp);
Console.Write("\n\n");
}
Console.WriteLine("Any key to exit...");
Console.Read();
}
static void WriteCounter(object obj)
{
var process = (ProcessInstance) obj;
Console.WriteLine(
$"Thread ID: {Thread.CurrentThread.ManagedThreadId}, " +
$"Process Name: {process.ProcessName}, " +
$"Process ID {process.ProcessId} ");
Console.Write("\n");
foreach (var cnt in process.Counters)
{
cnt.NextValue();
Console.WriteLine(
$"ThreadId: {Thread.CurrentThread.ManagedThreadId} | " +
$"Group: {cnt.CategoryName} | " +
$"Process: {cnt.InstanceName} | " +
$"Name: {cnt.CounterName} | " +
$"Value: {cnt.GetCalculatedValue(cnt.CounterName)}");
cnt.Close();
}
}
我看到它工作正常。正如我计算的那样,子循环将与父循环在一个线程中运行。但是在控制台中我看到了folowins。全部混合:
线程 ID:15,进程名称:SearchFilterHost,进程 ID 1552
线程 ID:12 |组: 过程 |进程:资源管理器 |名称:% 用户时间 |值:0
线程 ID:13 |组: 过程 |进程:mqsvc |名称:% 用户时间 |值:0
线程 ID:14 |组: 过程 |进程:SearchProtocolHost |名称:% 处理器时间 |值:0
线程 ID:4 |组: 过程 |进程:RtWLan |名称:% 特权时间 |值:0,599904
ThreadId:15 |组: 过程 |进程:SearchFilterHost |名称:% 处理器时间 |值:0
线程 ID:11 |组: 过程 |进程:VsHub |名称:% 特权时间 |值:0
线程 ID:16,进程名称:AAM 更新通知程序,进程 ID 1280线程 ID:12 |组: 过程 |进程:资源管理器 |名称:% 特权时间 |值:0,142615
ThreadId:15 |组: 过程 |进程:SearchFilterHost |名称:% 用户时间 |值:0
线程 ID:14 |组: 过程 |进程:SearchProtocolHost |名称:% 用户时间 |值:0
线程 ID:13 |组: 过程 |进程:mqsvc |名称:% 特权时间 |值:0
线程 ID:4 |组: 过程 |进程:RtWLan |名称:虚拟字节峰值 |价值:1,957683E+08
线程 ID:16 |组: 过程 |流程:AAM 更新通知程序 |名称:% 处理器时间 |值:0
按 ThreadID 分组输出应该怎么做?
【问题讨论】:
标签: c# multithreading threadpool