线程工具类(根据电脑逻辑处理器个数控制同时运行的线程个数)
生活随笔
收集整理的這篇文章主要介紹了
线程工具类(根据电脑逻辑处理器个数控制同时运行的线程个数)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks;namespace Utils {/// <summary>/// 線程工具類/// </summary>public class ThreadUtil{/// <summary>/// 使用的邏輯處理器數/// </summary>private static int _ProcessorCount;private static Semaphore _semaphore;private static List<Task> _TaskList = new List<Task>();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<object> doWork, object arg, Action<Exception> 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
總結
以上是生活随笔為你收集整理的线程工具类(根据电脑逻辑处理器个数控制同时运行的线程个数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下父子进程的全局变量
- 下一篇: Mysql中where条件一个单引号引发