博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Task/Parallel实现异步多线程
阅读量:5118 次
发布时间:2019-06-13

本文共 3526 字,大约阅读时间需要 11 分钟。

代码:

#region Task 异步多线程,Task是基于ThreadPool实现的            {                //TestClass testClass = new TestClass();                //Action action = new Action(t => testClass.TestThread(t.ToString()));                //TaskFactory taskFactory = new TaskFactory();                //List
taskList = new List
(); //for (int i = 0; i < 5; i++) //{ // Task task = taskFactory.StartNew(action, "task" + i); // taskList.Add(task); //} //同步等待 ////1.1所在线程等待,目前在主线程,等待某一个Task执行完毕,只要有一个完成,就继续往下执行。会卡住主线程。 //Task.WaitAny(taskList.ToArray()); //Console.WriteLine("某一个Task执行完毕"); ////1.2所在线程等待,目前在主线程,直到所有Task执行完毕;会卡住主线程。 //Task.WaitAll(taskList.ToArray()); //Console.WriteLine("所有Task执行完毕"); ////2.1回调等待 ////不卡主线程,所有Task完成,才执行下面的操作 //taskFactory.ContinueWhenAll(taskList.ToArray(), taskArray => //{ // Console.WriteLine("taskFactory.ContinueWhenAll {0}", Thread.CurrentThread.ManagedThreadId); // foreach (var item in taskArray) // { // Console.WriteLine(item.AsyncState); // Console.WriteLine(item.IsCompleted); // } //}); ////2.2回调等待 ////不卡主线程,有一个Task完成,就执行下面的操作 //taskFactory.ContinueWhenAny(taskList.ToArray(), taskAction => //{ // Console.WriteLine("taskFactory.ContinueWhenAny {0}", Thread.CurrentThread.ManagedThreadId); // Console.WriteLine(taskAction.AsyncState); // Console.WriteLine(taskAction.IsCompleted); //}); } #endregion #region Parallel 基于Task实现,多个任务并行计算,主线程也会计算,其实就是Task+WaitAll,一定会卡住主线程 { //Console.WriteLine("主线程的ID:{0}", Thread.CurrentThread.ManagedThreadId); //Parallel.Invoke(() => { Console.WriteLine("当前线程的ID:{0}", Thread.CurrentThread.ManagedThreadId); }, // () => { Console.WriteLine("当前线程的ID:{0}", Thread.CurrentThread.ManagedThreadId); }, // () => { Console.WriteLine("当前线程的ID:{0}", Thread.CurrentThread.ManagedThreadId); }, // () => { Console.WriteLine("当前线程的ID:{0}", Thread.CurrentThread.ManagedThreadId); }, // () => { Console.WriteLine("当前线程的ID:{0}", Thread.CurrentThread.ManagedThreadId); }); ////全部完成后,进入下一步,看上去就像同步编程 //Parallel.ForEach
(new int[] { 1, 2, 3, 4, 5 }, t => //{ // Console.WriteLine("当前线程ID:{0},结果:{1}", Thread.CurrentThread.ManagedThreadId, t * t); // Thread.Sleep(100); //}); // ParallelOptions options = new ParallelOptions() { MaxDegreeOfParallelism = 5 }; Parallel.For(0, 1000, options, t => { Console.WriteLine("结果:" + t.ToString()); }); Parallel.For(0, 1000, options, (t, state) => { Console.WriteLine("结果:" + t.ToString()); //state.Break();// //state.Stop();// //return; }); } #endregion

 

转载于:https://www.cnblogs.com/xsj1989/p/7833682.html

你可能感兴趣的文章
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
python常用函数
查看>>
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
【工具相关】iOS-Reveal的使用
查看>>
数据库3
查看>>
存储分类
查看>>
下一代操作系统与软件
查看>>
【iOS越狱开发】如何将应用打包成.ipa文件
查看>>
[NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
查看>>
Yii2 Lesson - 03 Forms in Yii
查看>>
Python IO模型
查看>>
Ugly Windows
查看>>
DataGridView的行的字体颜色变化
查看>>
Java再学习——关于ConcurrentHashMap
查看>>
如何处理Win10电脑黑屏后出现代码0xc0000225的错误?
查看>>
局域网内手机访问电脑网站注意几点
查看>>