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用于等待执行完 ...
随机推荐
- .NET 9 预览版:打造云原生及人工智能 AI 平台
前言 微软发布了 .NET 9 首个预览版,分享.NET团队对 .NET 9 的初步愿景,该愿景将于今年年底在 .NET Conf 2024 上发布. 重点关注针对云原生和人工智能领域的应用程序开发以 ...
- requests + tkinter 获取网页数据
代码: from tkinter import * import requests window = Tk() window.geometry('500x350+500+100') window.ti ...
- mysql 5.6 inner join and 慢优化
慢示例: SELECT o.id FROM o_schoolnotice o INNER JOIN o_schoolnotice_parent p ON o.id = p.noticeid AND p ...
- 在kubernetes里使用seccomp限制容器的系统调用
目录 一.系统环境 二.前言 三.系统调用简介 四.使用seccomp限制docker容器系统调用 五.在kubernetes里使用seccomp限制容器的系统调用 5.1 配置seccomp允许po ...
- IMX6ULL基本环境搭建
基本环境搭建 1 交叉编译工具 在虚拟机中安装交叉编译工具,为后续开发做准备. 1.1 工具版本 工具版本:Linaro Releases 当前虚拟机为64位系统,因此下载64位系统的工具: $ un ...
- php基本语法与安装
// 什么是PHP // PHP 是 后端语言的一种 // 主要作用就是实现数据交互 // ...
- knife4j/swagger救援第一现场
1.前方来报,测试环境springboot项目无法启动,现场如下: Error starting ApplicationContext. To display the auto-configurati ...
- k8s 安装ingress nginx controller 并部署.net core ingress服务
k8s 安装ingress nginx controller 并部署.net core ingress服务 本地k8s集群概览 192.168.28.132 k8smaster 192.168.28. ...
- k8s节点状态Init:0/1
k8s节点状态Init:0/1 在节点机器上打印日志: journalctl -f -u kubelet 出现以下内容: 5月 29 15:27:34 k8snode2 kubelet[2249]: ...
- 基于服务器响应的实时天气数据进行JSON解析的详细代码及其框架
#include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <err ...