作者:两人浪漫_607 | 来源:互联网 | 2022-12-02 15:25
我刚刚注意到.NET核心引入了Threadpool.QueueUserWorkItem的重载,它接受一个名为'preferlocal'的布尔值,并允许我传递一个类型安全的状态对象(它有一个通用参数)
在MSDN文档目前尚不完整,看起来像这样(为后人-它可能在将来被更新):
QueueUserWorkItem(Action, TState, Boolean)
C#
public static bool QueueUserWorkItem (Action callBack, TState state, bool preferLocal);
Type Parameters TState
Parameters
callBack Action
state
preferLocal Boolean
Returns
Boolean
什么是boolean(preferLocal),它将如何影响我的代码?
1> Damien_The_U..:
看起来它是由这个链接到此问题的拉取请求添加的(两个Github链接,"添加ThreadPool.QueueUserWorkItem(...,bool preferLocal)/#14214"和"为本地线程池队列添加QueueUserWorkItem /#12442",分别).
该问题描述为:
ThreadPool.QueueUserWorkItem总是排队到全局队列; 但是,当线程池线程对额外的工作项进行排队时,可以选择能够排队到当前线程池线程的本地队列.
理由和用法
当许多线程排队时,减少对全局队列的争用
排队工作项完成时可能更热的更多本地数据
利用线程池的任务窃取
(即类似于Task为子任务执行此操作的理性)
对我来说,遗憾的是,最新的内联文档(从中生成MSDN文档)不是拉取请求的先决条件.
首次构建线程池时,它只有一个工作队列要完成.但是,当所有的Task
好处都被引入框架时,他们借此机会引入线程本地队列(和工作窃取)以及现在重命名为全局队列的队列.看起来这是清理工作,允许特定访问这些队列.
@Jay - 它变成了一个追逐,首先确认它不在.NET Standard中,然后在".NET Core 2.1中的新功能"和".NET Core 2.0中的新功能"中都提到了然后意味着搜索github将是找到更多关于它的唯一方法.