不废话,直接贴上要实现的效果和代码...

【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异步多线程的更多相关文章

  1. Task/Parallel实现异步多线程

    代码: #region Task 异步多线程,Task是基于ThreadPool实现的 { //TestClass testClass = new TestClass(); //Action<o ...

  2. Task C# 多线程和异步模型 TPL模型

    Task,异步,多线程简单总结 1,如何把一个异步封装为Task异步 Task.Factory.FromAsync 对老的一些异步模型封装为Task TaskCompletionSource 更通用, ...

  3. .NET 异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消

    今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一 ...

  4. 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 ...

  5. NET 异步多线程,THREAD,THREADPOOL,TASK,PARALLEL

    .NET 异步多线程,THREAD,THREADPOOL,TASK,PARALLEL,异常处理,线程取消 今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主 ...

  6. .NET异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消

    今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一 ...

  7. 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 ...

  8. .Net进阶系列(13)-异步多线程(Task和Parallel)(被替换)

    一. Task开启多线程的三种形式 1. 利用TaskFactory下的StartNew方法,向StartNew传递无参数的委托,或者是Action<object>委托. 2. 利用Tas ...

  9. .Net进阶系列(10)-异步多线程综述(被替换)

    一. 综述 经过两个多个周的整理,异步多线程章节终于整理完成,如下图所示,主要从基本概念.委托的异步调用.Thread多线程.ThreadPool多线程.Task.Parallel并行计算.async ...

  10. c#异步多线程

    1.asyncrel = delegate.BeginInvoke实现委托异步调用. 2.异步等待 asyncrel.IsCompleted用于判断是否执行完毕 or EndInvoke用于等待执行完 ...

随机推荐

  1. .NET 9 预览版:打造云原生及人工智能 AI 平台

    前言 微软发布了 .NET 9 首个预览版,分享.NET团队对 .NET 9 的初步愿景,该愿景将于今年年底在 .NET Conf 2024 上发布. 重点关注针对云原生和人工智能领域的应用程序开发以 ...

  2. requests + tkinter 获取网页数据

    代码: from tkinter import * import requests window = Tk() window.geometry('500x350+500+100') window.ti ...

  3. 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 ...

  4. 在kubernetes里使用seccomp限制容器的系统调用

    目录 一.系统环境 二.前言 三.系统调用简介 四.使用seccomp限制docker容器系统调用 五.在kubernetes里使用seccomp限制容器的系统调用 5.1 配置seccomp允许po ...

  5. IMX6ULL基本环境搭建

    基本环境搭建 1 交叉编译工具 在虚拟机中安装交叉编译工具,为后续开发做准备. 1.1 工具版本 工具版本:Linaro Releases 当前虚拟机为64位系统,因此下载64位系统的工具: $ un ...

  6. php基本语法与安装

            // 什么是PHP         //     PHP 是 后端语言的一种          //         主要作用就是实现数据交互          //          ...

  7. knife4j/swagger救援第一现场

    1.前方来报,测试环境springboot项目无法启动,现场如下: Error starting ApplicationContext. To display the auto-configurati ...

  8. k8s 安装ingress nginx controller 并部署.net core ingress服务

    k8s 安装ingress nginx controller 并部署.net core ingress服务 本地k8s集群概览 192.168.28.132 k8smaster 192.168.28. ...

  9. k8s节点状态Init:0/1

    k8s节点状态Init:0/1 在节点机器上打印日志: journalctl -f -u kubelet 出现以下内容: 5月 29 15:27:34 k8snode2 kubelet[2249]: ...

  10. 基于服务器响应的实时天气数据进行JSON解析的详细代码及其框架

    #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <err ...