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

【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. redis 使用lua脚本 一次性获取多个hash key 字段值

    客户端命令行代码: eval "local rst={};local field='schoolid'; for i,v in pairs(KEYS) do rst[i]=redis.cal ...

  2. Android OpenMAX - 开篇

    Android Media是一块非常庞大的内容,上到APP的书写,中到播放器的实现.封装格式的了解,下到OMX IL层的实现.Decoder的封装,每一块都需要我们下很大的功夫学习.除此之外,我们还要 ...

  3. Android 13 - Media框架(29)- MediaCodec(四)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节我们了解了如何通过 onInputBufferAvailable 和 getInputBuffer 获取到 input buffer inde ...

  4. Yarp 让系统内调度更灵活 http、https、websocket 反向代理

    简介 Yarp 是微软团队开发的一个反向代理组件, 除了常规的 http 和 https 转换通讯,它最大的特点是可定制化,很容易根据特定场景开发出需要的定制代理通道. 详细介绍:https://de ...

  5. 记录工作中常用的 JS 数组相关操作

    工作中难免会遇到各种各样的数据结构,较为全面的了解数组操作,对于复杂数据结构的处理会非常有用且节省时间 所以想在这里总结一下工作中常用的数组操作,都是一些非常基础的知识,大家看个乐就好~ 目录 工作中 ...

  6. 箭头函数 函数中的this指向

      // 箭头函数         // 在匿名函数中,使用 => 箭头来替换 关键词 function          // 箭头定义下 () 和 {} 之间         // 等于在使 ...

  7. 程序员面试金典-面试题 16.25. LRU缓存

    题目: 设计和构建一个"最近最少使用"缓存,该缓存会删除最近最少使用的项目.缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量.当缓存被填满时,它应该 ...

  8. vitual box 安装centos7

    vitual box下载地址: https://www.virtualbox.org/wiki/Downloads centos7下载地址: CentOS Linux 选择7-2009,x86-64 ...

  9. 手把手教你免费用Flashduty做消息通知

    为什么需要消息通知? 如果有重要的情况发生,希望能通过各种媒介通知我们.可以举几个例子: 家里燃气费没有了,希望能有短信或者app通知 api频繁500报错,希望及时感知,及时修复 公司网站是http ...

  10. 副本集replicaSet

    mongodb高可用架构 https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/ 复制是跨多个服务器同步数据的过程. 复制提供 ...