博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程工具类(根据电脑逻辑处理器个数控制同时运行的线程个数)
阅读量:6069 次
发布时间:2019-06-20

本文共 1689 字,大约阅读时间需要 5 分钟。

代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace Utils{    ///     /// 线程工具类    ///     public class ThreadUtil    {        ///         /// 使用的逻辑处理器数        ///         private static int _ProcessorCount;        private static Semaphore _semaphore;        private static List
_TaskList = new List
(); private static object _lock = new object(); static ThreadUtil() { _ProcessorCount = Environment.ProcessorCount * 2 / 4; //使用的逻辑处理器数 if (_ProcessorCount < 1) _ProcessorCount = 1; _semaphore = new Semaphore(_ProcessorCount, _ProcessorCount); } public static void Run(Action
doWork, object arg, Action
errorAction) { Task task = null; task = Task.Factory.StartNew((obj) => { _semaphore.WaitOne(); try { doWork(obj); } catch (Exception ex) { errorAction(ex); } _semaphore.Release(); lock (_lock) { _TaskList.Remove(task); } }, arg); lock (_lock) { _TaskList.Add(task); } } public static void WaitAll() { Task.WaitAll(_TaskList.ToArray()); } }}
View Code

使用方法:

ThreadUtil.Run((obj) =>{    //todo},arg,(ex)=>{    //错误处理});
View Code

 

转载于:https://www.cnblogs.com/s0611163/p/8065478.html

你可能感兴趣的文章
MEF元数据应用说明
查看>>
maven错误解决:编码GBK的不可映射字符
查看>>
2016/4/19 反射
查看>>
SharePoint Wiki发布页面的“保存冲突”
查看>>
oracle 10g 数据库与客户端冲突导致实例创建无监听问题
查看>>
Delphi中读取文本文件的方法(实例一)
查看>>
Linux常用命令
查看>>
Android开源代码解读の使用TelephonyManager获取移动网络信息
查看>>
想说一点东西。。。。
查看>>
css知多少(8)——float上篇
查看>>
NLB网路负载均衡管理器详解
查看>>
水平添加滚动条
查看>>
PHP中”单例模式“实例讲解
查看>>
VS2008查看dll导出函数
查看>>
VM EBS R12迁移,启动APTier . AutoConfig错误
查看>>
atitit.细节决定成败的适合情形与缺点
查看>>
iOS - Library 库
查看>>
MATLAB 读取DICOM格式文件
查看>>
spring事务管理(Transaction)
查看>>
django.contrib.auth登陆注销学习
查看>>