C# -- 使用 Task 执行多线程任务

1. 使用 Task 执行多线程任务

    class Program
{
static void Main(string[] args)
{
Task task1 = new Task(() => {
Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
Stopwatch stw = new Stopwatch();
stw.Start();
long result = SumNumbers();
stw.Stop();
Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
}); Task task2 = new Task(() => {
Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
Stopwatch stw = new Stopwatch();
stw.Start();
long result = SumNumbers();
stw.Stop();
Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
}); Task task3 = new Task(() => {
Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
Stopwatch stw = new Stopwatch();
stw.Start();
long result = SumNumbers();
stw.Stop();
Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
}); task1.Start();
task2.Start();
task3.Start(); Console.ReadKey();
} static long SumNumbers(int count)
{
long sum = ;
for (int i = ; i < count; i++)
{
sum += i;
}
Thread.Sleep();
return sum;
}
}

执行结果:

2. 等待Task多线程任务执行完成

    class Program
{
static void Main(string[] args)
{
Task task1 = new Task(() => {
Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
Stopwatch stw = new Stopwatch();
stw.Start();
long result = SumNumbers();
stw.Stop();
Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
}); Task task2 = new Task(() => {
Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
Stopwatch stw = new Stopwatch();
stw.Start();
long result = SumNumbers();
stw.Stop();
Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
}); Task task3 = new Task(() => {
Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
Stopwatch stw = new Stopwatch();
stw.Start();
long result = SumNumbers();
stw.Stop();
Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
}); List<Task> listTask = new List<Task>();
listTask.Add(task1);
listTask.Add(task2);
listTask.Add(task3); task1.Start();
task2.Start();
task3.Start(); Task.WaitAll(listTask.ToArray());
Console.WriteLine("所有线程执行完成。"); Console.ReadKey();
} static long SumNumbers(int count)
{
long sum = ;
for (int i = ; i < count; i++)
{
sum += i;
}
Thread.Sleep();
return sum;
}
}

执行结果:

C# -- 使用 Task 执行多线程任务的更多相关文章

  1. 大数据学习day22------spark05------1. 学科最受欢迎老师解法补充 2. 自定义排序 3. spark任务执行过程 4. SparkTask的分类 5. Task的序列化 6. Task的多线程问题

    1. 学科最受欢迎老师解法补充 day21中该案例的解法四还有一个问题,就是当各个老师受欢迎度是一样的时候,其排序规则就处理不了,以下是对其优化的解法 实现方式五 FavoriteTeacher5 p ...

  2. 【转】【C#】【Thread】【Task】多线程

    多线程 多线程在4.0中被简化了很多,仅仅只需要用到System.Threading.Tasks.::.Task类,下面就来详细介绍下Task类的使用. 一.简单使用 开启一个线程,执行循环方法,返回 ...

  3. Task C# 多线程和异步模型 TPL模型 【C#】43. TPL基础——Task初步 22 C# 第十八章 TPL 并行编程 TPL 和传统 .NET 异步编程一 Task.Delay() 和 Thread.Sleep() 区别

    Task C# 多线程和异步模型 TPL模型   Task,异步,多线程简单总结 1,如何把一个异步封装为Task异步 Task.Factory.FromAsync 对老的一些异步模型封装为Task ...

  4. 基于Task的多线程

    /// <summary> /// 基于Task的多线程 /// </summary> public class Tasks { public static void Task ...

  5. Task+ConcurrentQueue多线程编程

    队列(Queue)代表了一个先进先出的对象集合.当您需要对各项进行先进先出的访问时,则使用队列.当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队. ConcurrentQueue< ...

  6. Oracle定时器执行多线程

    what里面加下面代码强制执行多线程   begin  execute immediate 'alter session force parallel dml parallel 16';  pkg_s ...

  7. .NET 并行(多核)编程系列之五 Task执行和异常处理

    原文:.NET 并行(多核)编程系列之五 Task执行和异常处理 .NET 并行(多核)编程系列之五 Task执行和异常处理 前言:本篇主要讲述等待task执行完成. 本篇的议题如下: 1. 等待Ta ...

  8. C# 线程知识--使用Task执行异步操作

    在C#4.0之前需要执行一个复杂的异步操作时,只能使用CLR线程池技术来执行一个任务.线程池执行异步任务时,不知道任务何时完成,以及任务的在任务完成后不能获取到返回值.但是在C#4.0中引人了一个的任 ...

  9. 【Spark2.0源码学习】-10.Task执行与回馈

         通过上一节内容,DriverEndpoint最终生成多个可执行的TaskDescription对象,并向各个ExecutorEndpoint发送LaunchTask指令,本节内容将关注Exe ...

随机推荐

  1. Android 9.0适配遇到的问题1

    文章同步自javaexception 本周在适配Android 9.0,过程中碰到了小问题 问题1: SSL handshake timed out 解决办法: Android 9.0 开始,默认不允 ...

  2. Android values资源的定义

    Android values资源是Xml格式的文件 上图定义了颜色(colors)字符串(strings)样式(style)三个资源文件 xml文件写在resources标签里 <?xml ve ...

  3. 找不到servlet对应的class

    javax.servlet.ServletException: Wrapper cannot find servlet class com.suntomor.lewan.pay.NotifyRecei ...

  4. ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路

    一.前言  最近一段时间自己主要的学习计划还是按照毕业后设定的计划,自己一步步的搭建一个前后端分离的 ASP.NET Core 项目,目前也还在继续学习 Vue 中,虽然中间断了很长时间,好歹还是坚持 ...

  5. qml demo分析(abstractitemmodel-数据分离)

    一.概述 qt5之后qml也可以被用于桌面程序开发,今天我就拿出qt demo中的一个qml示例程序进行分析.这个demo主要是展示了qml数据和展示分离的使用方式,qml只专注于快速高效的绘制界面, ...

  6. 知识小罐头06(tomcat8请求源码分析 中)

    更正上一篇一个小错误,Connector中首先是将socket请求过来的信息封装成一个普通的Request对象(上一篇我写成HttpRequest对象,失误失误,根本就木有HttpRequest这样的 ...

  7. springboot~Integer和int如何选择,Integer的意义何在

    今天说一下自己在项目中遇到的问题,然后总结一下Integer引用类型和int值类型 关于默认值 Integer默认为null int默认为0 为什么把数据实体设计成Integer或者不是int 大叔认 ...

  8. 前端笔记之服务器&Ajax(中)MySQL基础操作&PHP操作数据库&Ajax

    一.数据库基础 1.1什么是数据库? 什么是数据库? 答:就是一个很大的一个文件,只不过这个文件可以通过一些‘命令’操作数据: 增.删.改.查数据: 数据库等于持久数据和数据操作的一个统称. 数据库是 ...

  9. 100 - k8s源码分析-准备工作

    今天我们开始讲kubernetes的源码! 之前的其他开源项目还没有说完,后续会陆陆续续更新,我们把主线先放到k8s的源码上. 之前我想详细讲解每一行k8s源码,但是越看越发现一个大型开源项目如果拘泥 ...

  10. winform中使用委托进行窗体之间的传值

    一.传统的方式 创建一个公共数据资源类,用于存储窗体2的TextBox的值: public class ComValue { public static string Txtvalue { get; ...