zoukankan      html  css  js  c++  java
  • 线程工具类(根据电脑逻辑处理器个数控制同时运行的线程个数)

    代码:

    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
  • 相关阅读:
    vagrant使用
    商品分类
    猜你喜欢
    [NOIP2012]开车旅行
    bzoj 1029: [JSOI2007]建筑抢修
    bzoj 2127: happiness
    bzoj 2561: 最小生成树
    bzoj 3331: [BeiJing2013]压力
    数组中简便方法求最大值,最小值,平均值,求和,和个数
    #include 和 #import 的区别, @class 的含义
  • 原文地址:https://www.cnblogs.com/s0611163/p/8065478.html
Copyright © 2011-2022 走看看