Task异步多线程
不废话,直接贴上要实现的效果和代码...

【1】直接使用Lambda表达式是实现多线程:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Task异步多线程
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("主线程执行业务处理.");
Task task1 = new Task(() =>
{
Console.WriteLine($"异步线程:使用System.Threading.Tasks.Task执行异步操作.");
for (int i = 0; i < 10; i++)
{
Thread.Sleep(500);
Console.WriteLine($"异步线程输出:{i}");
}
}
);
Console.WriteLine("主线程处理其他任务");
Console.WriteLine("sleep 3000");
task1.Start();
Thread.Sleep(1000);
Console.ReadLine();
}
}
}
【2】使用Lambda表达式匿名方式实现异步:
static void Main(string[] args)
{
Console.WriteLine("主线程执行业务处理.");
///利用匿名 lambda表达式实现异步线程
(new Task(() =>
{
Console.WriteLine($"异步线程:使用System.Threading.Tasks.Task执行异步操作.");
for (int i = 0; i < 10; i++)
{
Thread.Sleep(500);
Console.WriteLine($"异步线程输出:{i}");
}
}
)).Start();
Console.WriteLine("主线程处理其他任务");
Console.WriteLine("sleep 3000");
Thread.Sleep(1000);
Console.ReadLine();
}
}
【3】异步线程创建函数封装方式(注意这种情况下,方法用static修饰,使得Main()函数能直接调用):
static void Main(string[] args)
{
Console.WriteLine("主线程执行业务处理.");
Task task1= AsyTask();
Console.WriteLine("主线程处理其他任务");
task1.Start();
Console.WriteLine("sleep 3000");
Thread.Sleep(1000);
Console.ReadLine();
}
static Task AsyTask() {
Task task= new Task(() =>
{
Console.WriteLine($"异步线程:使用System.Threading.Tasks.Task执行异步操作.");
for (int i = 0; i < 10; i++)
{
Thread.Sleep(500);
Console.WriteLine($"异步线程输出:{i}");
}
}
);
return task;
}
【4】在其他类中封装方法:
class Program
{
static void Main(string[] args)
{
TaskSch taskSch = new TaskSch();
Console.WriteLine("主线程执行业务处理.");
Task task1 = taskSch.AsyTask(0,10,"一");//创建异步线程
Console.WriteLine("主线程处理其他任务");
task1.Start();//启动异步线程
Console.WriteLine("sleep 3000");
Thread.Sleep(1000);
Console.ReadLine();
}
}
}
class TaskSch
{
public Task AsyTask(int a, int b, string info)
{ //创建任务
Task task = new Task(() =>
{
Console.WriteLine($"异步线程{info}:使用System.Threading.Tasks.Task执行异步操作.");
for (int i = 0; i < b; i++)
{
Thread.Sleep(500);
Console.WriteLine($"异步线程{ info}:{ a + i}");
}
}
);
return task;
}
运行结果:

【创作不易,如果您觉得对您的学习有那么一点点儿帮助,请点击页面侧边栏轻微打赏!】
Task异步多线程的更多相关文章
- Task/Parallel实现异步多线程
代码: #region Task 异步多线程,Task是基于ThreadPool实现的 { //TestClass testClass = new TestClass(); //Action<o ...
- Task C# 多线程和异步模型 TPL模型
Task,异步,多线程简单总结 1,如何把一个异步封装为Task异步 Task.Factory.FromAsync 对老的一些异步模型封装为Task TaskCompletionSource 更通用, ...
- .NET 异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消
今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一 ...
- c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习
c#中@标志的作用 参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...
- NET 异步多线程,THREAD,THREADPOOL,TASK,PARALLEL
.NET 异步多线程,THREAD,THREADPOOL,TASK,PARALLEL,异常处理,线程取消 今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主 ...
- .NET异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消
今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一 ...
- 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 ...
- .Net进阶系列(13)-异步多线程(Task和Parallel)(被替换)
一. Task开启多线程的三种形式 1. 利用TaskFactory下的StartNew方法,向StartNew传递无参数的委托,或者是Action<object>委托. 2. 利用Tas ...
- .Net进阶系列(10)-异步多线程综述(被替换)
一. 综述 经过两个多个周的整理,异步多线程章节终于整理完成,如下图所示,主要从基本概念.委托的异步调用.Thread多线程.ThreadPool多线程.Task.Parallel并行计算.async ...
- c#异步多线程
1.asyncrel = delegate.BeginInvoke实现委托异步调用. 2.异步等待 asyncrel.IsCompleted用于判断是否执行完毕 or EndInvoke用于等待执行完 ...
随机推荐
- 【HarmonyOS NEXT】获取卸载APP后不变的设备ID
1. 背景 在HarmonyOS NEXT中,想要获取设备ID,有3种方式 UDID:deviceinfo.udid,仅限系统应用使用 AAID: aaid.getAAID(),然而卸载APP/恢复设 ...
- 高效运维_AIRIOT智慧电力运维解决方案
可再生能源的引入带来了能源生产的去中心化和分散化趋势,同时也带来了能源输出的波动性和不确定性.电力运维因此需要更加灵活.智能的解决方案,以适应可再生能源的集成,确保电力系统的稳定运行,传统的电力运维管 ...
- VisioForge.DotNet.Core.UI.WPF WPF摄像头 UVC 显示 支持 .net core
Sample applications available at https://github.com/visioforge/.Net-SDK-s-samples . Please add Visio ...
- NOIP模拟98(多校30)
T1 构造字符串 解题思路 不算特别难的题,但是有一点细节... 首先需要并茶几缩一下点,然后判断一下是否合法,由于我们需要字典序最小的,因此我们应当保证一个联通块中标号较小的点为根节点. 那么对于所 ...
- Vue.js 动态组件与异步组件
title: Vue.js 动态组件与异步组件 date: 2024/6/2 下午9:08:50 updated: 2024/6/2 下午9:08:50 categories: 前端开发 tags: ...
- 安装配置intelli IDEA
效果 操作 去官网下载安装包 下载 Intelli IDEA 下载插件 插件下载 打开IDEA安装目录下的bin目录,找到idea64.exe.vmoptions配置文件 添加配置 打开indea,添 ...
- vue Ref 动态组件 keeplive
ref被用来给元素或子组件注册引用信息.引用信息将会注册在父组件的 $refs 对象上.如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素:如果用在子组件上,引用就指向组件实例 # 普通d ...
- kettle从入门到精通 第五十三课 ETL之kettle MQTT/RabbitMQ producer 实战
1.MQTT介绍 MQTT (Message Queuing Telemetry Transport) 是一种轻量级的消息传输协议,设计用于连接低带宽.高延迟或不可靠网络的设备. MQTT 是基于发布 ...
- Linux扩展篇-shell编程(十一)- shell编程工具-VS Code
根据个人多年工作经验,shell没有自己专用的IDE,使用vim开发,对于新手而言不太友好,那如何高效快速书写shell脚本?合适的工具就显得尤为重要,本人比较推荐的就是VS Code.里面有比较成熟 ...
- es6.6.1 rest常规操作
ES 内置的REST接口/ 获取版本信息/index/_search 搜索指定索引下的数据 test/_search/_aliases 获取或者操作索引下的别名 _aliases/index/ 查看指 ...