C#多线程の遇见长耗时操作以及多任务(简明记要)
4.0用 Task.Factory.StartNew(()=>{});
4.0以下用 ThreadPool.QueueUserWorkItem(()=>{})
4.0以上用 Task.Run(()=>{});
多任务:
Task[] tasks = new Task[maxCurrent];
for (int i = beginId; i <= maxId; i += interval, counter++)
tasks[counter] = new Task(worker.TestHandler, TaskCreationOptions.LongRunning);
var continuation = Task.Factory.ContinueWhenAll(
tasks,(antecedents) =>{
LogInfo("All threads have loaded!");
});
foreach (Task t in tasks)
t.Start();
LogInfo("All threads have been queued. Waiting to complete...");
while (!continuation.IsCompleted)
Thread.Sleep(1000);
static Random _random = new Random();
static void Main(string[] args)
{
ArrayList listThread = new ArrayList();
ArrayList listResult = new ArrayList();
for (int i = 0; i < 10; i++)
{
Thread thread = new Thread(new ParameterizedThreadStart(WorkThread));
thread.Start(listResult);
listThread.Add(thread);
}
foreach (Thread thread in listThread)
{
thread.Join();
}
foreach (int i in listResult)
{
Console.WriteLine(i);
}
}
static void WorkThread(object list)
{
int cnt = _random.Next(1,10);
ArrayList listLocal = new ArrayList();
for (int i = 0; i < cnt; i++)
{
listLocal.Add(cnt);
Thread.Sleep(100);
}
lock (list)
{
(list as ArrayList).AddRange(listLocal);
}
}
最新文章
- Delphi线程基础知识
- 手持终端PDA应用固定资产管理系统(资产查询 盘点)软件程序系统
- JVM垃圾回收机制总结(3) :按代垃圾收集器
- 解决cell循环利用造成的重复勾选
- Python Set集合,函数,深入拷贝,浅入拷贝,文件处理
- 《Java解惑》书摘
- Java EE (1) -- Java EE 6 Web Component Developer Certified Expert(1z0-899)
- hdu1005 Number Sequence---找循环节
- 查看celery 队列长度
- markdown自动生成侧边栏TOC /目录
- 格式化输出的方法:%、.format()、f
- 安装kafka 集群 步骤
- 素数回文(hdu1431)
- golang基础--类型与变量
- docker重命名镜像
- JSP页面中使用JSTL标签出现无法解析问题解决办法
- shiro之深度解析FormAuthenticationFilter
- 持续集成之路 —— Mock对象引起的测试失败
- mysql查看版本
- web相关文件加载顺序
热门文章
- 【linux】如何开放防火墙端口
- BZOJ2028: [SHOI2009]会场预约(set)
- 洛谷P1333 瑞瑞的木棍(欧拉回路)
- Windows 10 运行原生Bash【Ubuntu】
- Scrapy 为每一个Spider设置自己的Pipeline
- Apache httpd.conf配置文件主要内容解释
- python的datetime模块处理时间
- 【Apache运维基础(6)】Apache的日志管理与分析
- 卸载时候出现: windows installer 程序有问题。此安装需要的dll不能运行 的一个解决方法
- shell编程-文件包含(十)