微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

线程工具类(根据电脑逻辑处理器个数控制同时运行的线程个数)

代码

using System;
 System.Collections.Generic;
 System.Linq;
 System.Text;
 System.Threading;
 System.Threading.Tasks;

namespace Utils
{
    /// <summary>
    /// 线程工具类
    </summary>
    public class ThreadUtil
    {
        <summary>
         使用的逻辑处理器数
        </summary>
        private static int _ProcessorCount;
        static Semaphore _semaphore;
        static List<Task> _TaskList = new List<Task>();
        object _lock = new object();

         ThreadUtil()
        {
            _ProcessorCount = Environment.ProcessorCount * 2 / 4; //使用的逻辑处理器数
            if (_ProcessorCount < 1) _ProcessorCount = 1;
            _semaphore = new Semaphore(_ProcessorCount,_ProcessorCount);
        }

        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)
            {
                _TaskList.Add(task);
            }
        }

        void WaitAll()
        {
            Task.WaitAll(_TaskList.ToArray());
        }
    }
}
View Code

使用方法

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐