如何在.net 4.0中获取正在运行的任务列表

Mar*_*kus 8 c# task-parallel-library

我正在尝试获取所有当前正在运行的任务的列表..net 4.0任务API是否提供此类功能?或者唯一的选择是明确地将任务存储在单独的集合中?

Rus*_*ted 5

我想你需要TaskScheduler.GetScheduledTasks方法,但是:

  1. 它受到保护
  2. MSDN 说它应该只用于调试
  3. 据我所知这个方法只有ThreadPoolTask​​Scheduler实现,SynchronizationContextTaskScheduler总是返回null

所以我认为你应该尝试实现自己的 TaskScheduler来实现你的目标。


HW9*_*W90 0

MSDN 上有一篇很好的文章http://msdn.microsoft.com/en-us/library/ms997649.aspx 您需要的一切都描述得非常好。

编辑:也许这会有所帮助:

using System;
using System.Diagnostics;

class MainClass
{
   public static void Main()
   {
      Process[] allProcs = Process.GetProcesses();

      foreach(Process proc in allProcs)
      {
         ProcessThreadCollection myThreads = proc.Threads;
         Console.WriteLine("process: {0},  id: {1}", proc.ProcessName, proc.Id);

         foreach(ProcessThread pt in myThreads)
         {
            Console.WriteLine("  thread:  {0}", pt.Id);
            Console.WriteLine("    started: {0}", pt.StartTime.ToString());
            Console.WriteLine("    CPU time: {0}", pt.TotalProcessorTime);
            Console.WriteLine("    priority: {0}", pt.BasePriority);
            Console.WriteLine("    thread state: {0}", pt.ThreadState.ToString()); 
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,OP 澄清了他的问题:他正在谈论“System.Threading.Task”。 (4认同)