异步执行方法的最快方法?

Joa*_*mer 11 c# performance multithreading asynchronous

我正在处理一个问题,我必须将很多函数调度到另一个线程,以防止当前函数阻塞.现在我想知道执行这项任务的最快方法是什么.

目前我一直坚持

ThreadPool.UnsafeQueueUserWorkItem
Run Code Online (Sandbox Code Playgroud)

因为它比常规的QueueUserWorkItem略快.但是,我担心线程池可能会阻止它.有没有更快的方法调用方法调用到另一个线程?我只是想知道这项任务的最佳做法是什么?不安全的代码是没有问题的,因为它在已经使用了很多互操作的场景中.谢谢j.

Sal*_*ain 2

CLR(4) 团队建议:

任务现在是将工作排队到线程池的首选方式。

有关详细信息,请阅读CLR 4.0 线程池改进:第 1 部分新增和改进的 CLR 4 线程池引擎。简而言之,原因是:本地队列、线程重用、工作窃取。基本上是为了负载平衡的目标。

附加功能:

我不明白为什么这不是答案(被否决)。

你写了

我必须将大量函数分派到另一个线程以防止当前函数阻塞”

我回答:一些 TPL(存在于 net35)“块”(并发集合、旋转原语等)是专门为高度并发访问而设计的,重点是最大限度地减少或消除阻塞,以实现高效的工作管理。您也可以使用这些块(例如 - BlockingCollection 来解决您的问题)。TPL 设计用于以最小的开销(或在 PLinq 的帮助下数百万个)创建和处理数百个(甚至数千个)CPU/IO 密集型操作(任务)。

你问:

我只是想知道这样的任务的最佳实践是什么?

我已经回答过:最佳实践 - TPL(有原因的,不仅仅是我的建议)