C# TPL线程池-线程计数

C# TPL线程池-线程计数,c#,.net,multithreading,task-parallel-library,scheduled-tasks,C#,.net,Multithreading,Task Parallel Library,Scheduled Tasks,我有一个工人处理云队列消息。 对于每个队列消息,它创建一个任务并运行一些带有2个IO操作的短lambda 例如,这是lambda: 反序列化队列消息的负载 将REST请求发送到端点x(非阻塞IO操作) 做一些小的计算工作(类似于jsonvert.Deserialize) 将新消息排入另一个云队列(非阻塞IO操作) 工作进程配置为最多可运行2000个任务。 仅在VM上运行此代码-我可以看到每秒有14K上下文切换,有300-500个线程在运行 我想知道默认TaskScheduler线程池中运行了多少

我有一个工人处理云队列消息。 对于每个队列消息,它创建一个任务并运行一些带有2个IO操作的短lambda

例如,这是lambda:

  • 反序列化队列消息的负载
  • 将REST请求发送到端点x(非阻塞IO操作)
  • 做一些小的计算工作(类似于
    jsonvert.Deserialize
  • 将新消息排入另一个云队列(非阻塞IO操作)
  • 工作进程配置为最多可运行2000个任务。

    仅在VM上运行此代码-我可以看到每秒有14K上下文切换,有300-500个线程在运行

    我想知道默认TaskScheduler线程池中运行了多少线程


    我怎样才能检查呢?

    你真正的问题是什么?你会用这些信息解决什么问题?我的想法是,如果池中有许多线程(几十个或几百个)运行,它们会产生大量的上下文切换,如果是这样的话。。我将使用池中线程数量恒定的自定义TaskScheduler。池中的线程处于活动状态,但并非所有线程都在工作。有些人只是在等待工作/终止。你应该考虑如何组织你的行动。TPL数据流将是正确的起点该池中的线程如何等待工作/终止?它们执行代码的第一个同步部分,并执行非阻塞IO操作,直到操作系统的IO线程发送事件为止。我缺少什么?正确的方法不是构建自定义池/调度程序,而是使用TPL数据流