线程池ThreadPool实现异步多线程
ThreadPool线程池的主要方法:
1. public static Boolean QueueUserWorkItem(WaitCallback wc, Object state);
WaitCallback回调函数:通过将一些回调函数放入线程池中让其形成队列,然后线程池会自动创建或者复用线程去执行处理这些回调函数。State: 这个参数也是非常重要的,当执行带有参数的回调函数时,该参数会将引用传入,回调方法中,供其使用。
eg:用于文件处理://删除ftp目录文件
DataTable dt = new ArchivesHelper().GetFileListByArchivesId(ID); //ftp文件
foreach (DataRow dr in dt.Rows)
{
StateInfo sta = new StateInfo();
sta.FtpPath = dr["filePath"].ToString();
sta.FtpThumbnailPath = dr["Thumbnail"].ToString();
//hreadProc方法加入线程池中执行,sta对象传入回调函数,供ThreadProc方法使用
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc), sta);
}
/// <summary>
/// 创建一个委托来引用在辅助线程中执行的代码(接受一个对象参数并且没有返回值)
/// </summary>
/// <param name="stateInfo"></param>
private void ThreadProc(Object stateInfo)
{
var sta = stateInfo as StateInfo;
FtpHelper.DeleteFile(sta.FtpPath); //删除ftp文件
FtpHelper.DeleteFile(sta.FtpThumbnailPath);//删除ftp缩略图
}
线程池ThreadPool实现异步多线程的更多相关文章
- C#多线程学习 之 线程池[ThreadPool](转)
在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPo ...
- 多线程系列 线程池ThreadPool
上一篇文章我们总结了多线程最基础的知识点Thread,我们知道了如何开启一个新的异步线程去做一些事情.可是当我们要开启很多线程的时候,如果仍然使用Thread我们需要去管理每一个线程的启动,挂起和终止 ...
- 多线程系列(2)线程池ThreadPool
上一篇文章我们总结了多线程最基础的知识点Thread,我们知道了如何开启一个新的异步线程去做一些事情.可是当我们要开启很多线程的时候,如果仍然使用Thread我们需要去管理每一个线程的启动,挂起和终止 ...
- C#多线程学习 之 线程池[ThreadPool]
在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPo ...
- [转]C#多线程学习 之 线程池[ThreadPool]
在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPo ...
- C# -- 使用线程池 ThreadPool 执行多线程任务
C# -- 使用线程池 ThreadPool 执行多线程任务 1. 使用线程池 class Program { static void Main(string[] args) { WaitCallba ...
- 多线程Thread,线程池ThreadPool
首先我们先增加一个公用方法DoSomethingLong(string name),这个方法下面的举例中都有可能用到 #region Private Method /// <summary> ...
- python中多进程multiprocessing、多线程threading、线程池threadpool
浅显点理解:进程就是一个程序,里面的线程就是用来干活的,,,进程大,线程小 一.多线程threading 简单的单线程和多线程运行:一个参数时,后面要加逗号 步骤:for循环,相当于多个线程——t=t ...
- 线程池ThreadPool的初探
一.线程池的适用范围 在日常使用多线程开发的时候,一般都构造一个Thread示例,然后调用Start使之执行.如果一个线程它大部分时间花费在等待某个事件响应的发生然后才予以响应:或者如果在一定期间内重 ...
随机推荐
- java中初始化方法
本文主要是讲从<java编程思想>中看到的东西,是第七章复用类的开头内容,主要是类初始化的几种方法的位置,主要包括 1.在定义对象的地方.这意味着他们总是在构造器被调用前被初始化. 2.在 ...
- Azure上每个VM多个IP地址
Azure的每个VM都有多种IP地址,包括DIP.VIP和PIP.具体如下: DIP地址是在VM里能够看到的IP地址,即私网地址:PIP地址是这个VM关联的公网IP地址,即公网地址:VIP地址是负载均 ...
- HDU4006(小根堆)
The kth great number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Oth ...
- Java-API:java.util.UUID
ylbtech-Java-API:java.util.UUID 1.返回顶部 2.返回顶部 3.返回顶部 4. 百科返回顶部 5.返回顶部 0. https://docs.oracle ...
- Python函数(五)-高阶函数
函数接收的参数可以是数字,字符串,列表,元组,字典,集合,也可以是另一个函数,那么这个接收一个函数作为参数的函数就称为高阶函数 # -*- coding:utf-8 -*- __author__ = ...
- 通过phpMyAdmin拿webshell
general_log默认为关闭的,root权限开启后,general_log_file会保存所有的查询语句 所以可以开启general_log,然后设置general_log_file为一个php文 ...
- Python数据库(三)-使用sqlalchemy创建表
首先需要安装sqlalchemy根据所需情况调用数据库接口,对数据库进行操作pymysql:mysql+pymysql://<username>:<password>@< ...
- 11-23网页基础--JavaScript基础知识
第一课 JavaScript简介 一.定义:JavaScript是脚本语言,需要宿主文件,它的宿主文件是html文件. JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 ...
- 反向索引(Inverted Index)
转自:http://zhangyu8374.iteye.com/blog/86307 反向索引是一种索引结构,它存储了单词与单词自身在一个或多个文档中所在位置之间的映射.反向索引通常利用关联数组实现. ...
- Vue基础汇总
1)双向绑定: <div id="app"> <p>{{message}}</p> <input v-model="messag ...