VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > C#编程 >
  • C#教程之C# 扩展TaskScheduler实现独立线程池,支持多任务批量处理,互不干扰,无缝兼容(2)

本站最新发布   C#从入门到精通
试听地址  
https://www.xin3721.com/eschool/CSharpxin3721/

{ if (_MainPageTask == null) _MainPageTask = new LimitedTaskScheduler(16); return _MainPageTask; } } #endregion #region 图片加载任务 private static LimitedTaskScheduler _LoadImageTask; /// <summary> /// 图片加载任务(32个线程) /// </summary> public static LimitedTaskScheduler LoadImageTask { get { if (_LoadImageTask == null) _LoadImageTask = new LimitedTaskScheduler(32); return _LoadImageTask; } } #endregion #region 浏览器任务 private static LimitedTaskScheduler _BrowserTask; /// <summary> /// 浏览器任务 /// </summary> public static LimitedTaskScheduler BrowserTask { get { if (_BrowserTask == null) _BrowserTask = new LimitedTaskScheduler(2); return _BrowserTask; } } #endregion } }
复制代码

     Form1.cs测试代码:

复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Management;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Utils;

namespace test
{
    public partial class Form1 : Form
    {
        private TaskSchedulerEx _taskSchedulerEx = null;
        private TaskSchedulerEx _taskSchedulerExSmall = null;
        private TaskSchedulerEx _task = null;

        public Form1()
        {
            InitializeComponent();
            _taskSchedulerEx = new TaskSchedulerEx(50, 500);
            _taskSchedulerExSmall = new TaskSchedulerEx(5, 50);
            _task = new TaskSchedulerEx(2, 10);
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        /// <summary>
        /// 模拟大量网络请求任务
        /// </summary>
        private void button1_Click(object sender, EventArgs e)
        {
            DoTask(_taskSchedulerEx, 200000, 1000, 20);
        }

        /// <summary>
        /// 模拟CPU密集型任务

        /// </summary>
        private void button2_Click(object sender, EventArgs e)
        {
            DoTask(_taskSchedulerEx, 100000, 2000, 1);
        }

        /// <summary>
        /// 模拟大量网络请求任务
        /// </summary>
        private void button3_Click(object sender, EventArgs e)
        {
            DoTask(_taskSchedulerExSmall, 2000, 100, 20);
        }

        /// <summary>
        /// 模拟CPU密集型任务

        /// </summary>
        private void button4_Click(object sender, EventArgs e)
        {
            DoTask(_taskSchedulerExSmall, 2000, 100, 1);
        }

        /// <summary>
        /// 模拟任务
        /// </summary>
        /// <param name="scheduler">scheduler</param>
        /// <param name="taskCount">任务数量</param>
        /// <param name="logCount">每隔多少条数据打一个日志</param>
        /// <param name="delay">模拟延迟或耗时(毫秒)</param>
        private void DoTask(TaskSchedulerEx scheduler, int taskCount, int logCount, int delay)
        {
            _task.Run(() =>
            {
                Log("开始");
                DateTime dt = DateTime.Now;
                List<Task> taskList = new List<Task>();
                for (int i = 1; i <= taskCount; i++)
                {
                    Task task = scheduler.Run((obj) =>
                    {
                        var k = (int)obj;
                        Thread.Sleep(delay); //模拟延迟或耗时
                        if (k % logCount == 0)
                        {
                            Log("最大线程数:" + scheduler.MaxThreadCount + " 核心线程数:" + scheduler.CoreThreadCount + " 活跃线程数:" + scheduler.ActiveThreadCount.ToString().PadLeft(4, ' ') + " 处理数/总数:" + k + " / " + taskCount);
                        }
                    }, i, (ex) =>
                    {
                        Log(ex.Message);
                    });
                    taskList.Add(task);
                }
                Task.WaitAll(taskList.ToArray());
                double d = DateTime.Now.Subtract(dt).TotalSeconds;
                Log("完成,耗时:" + d + "");
            });
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (_taskSchedulerEx != null)
            {
                _taskSchedulerEx.Dispose(); //释放资源
                _taskSchedulerEx = null;
            }
        }
    }
}
复制代码

     测试截图:

 

相关教程
        
关于我们--广告服务--免责声明--本站帮助-友情链接--版权声明--联系我们       黑ICP备07002182号