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

【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. Hugging Face 与 Wiz Research 合作提高人工智能安全性

    我们很高兴地宣布,我们正在与 Wiz 合作,目标是提高我们平台和整个 AI/ML 生态系统的安全性. Wiz 研究人员 与 Hugging Face 就我们平台的安全性进行合作并分享了他们的发现. W ...

  2. LLM实战:LLM微调加速神器-Unsloth + Qwen1.5

    1. 背景 上一篇介绍了基于训练加速框架Unsloth,微调训练Llama3的显卡资源占用及训练时间对比. 近期Unsloth新增了Qwen1.5的模型适配,因此本qiang~马不停蹄地又进行了一次实 ...

  3. 网络性能评估工具Iperf详解

    一.网络性能评估工具Iperf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理.网络存在安全漏洞等原因,都会导致网络带宽利用率不高.要找到网络 ...

  4. 莫烦tensorflow学习记录 (7)循环神经网络 RNN & LSTM

    莫凡大佬的原文章https://mofanpy.com/tutorials/machine-learning/tensorflow/intro-RNN/ RNN 的用途 可以读取数据中的顺序,获取顺序 ...

  5. ubuntu下openCV-Haar特征分类器训练

    ubuntu下openCV-Haar特征分类器训练 这段时间在学openCV,准备做一个头部检测,但是openCV自带的分类器只有人脸检测的,而且准确度不高,就准备自己训练一个分类器.在网上看了很多的 ...

  6. TIM_Cmd()函数引发的思考

    在使用定时器的输入捕获进行频率测量时发现用TIM_Cmd()函数关闭定时器后,输入捕获中断还是会被触发,这就很奇怪了,输入捕获是定时器的一种模式,关闭定时器不就意味着输入捕获捕获也被关闭了吗?可是实际 ...

  7. 15种pod的状态

    15种pod的状态 调度失败 常见错误状态(Unschedulable) pod被创建后进入调度阶段,k8s调度器依据pod声明的资源请求量和调度规则,为pod挑选一个适合运行的节点.当集群节点不满足 ...

  8. k8s——deployment

    创建deployment [root@master deploy]# kubectl create deploy nginx-deploy --image=nginx:1.7.9 deployment ...

  9. redhat8连接xshell命令卡顿

    取消下方  转发x11连接到(X) 再重新连接一遍 就好了

  10. FlashDuty Changelog 2023-10-30 | 告警路由与 Slack 应用

    FlashDuty:一站式告警响应平台,前往此地址免费体验! 告警路由 什么是告警路由? FlashDuty已经与Zabbix.Prometheus等监控系统实现无缝集成,通过一个简单的webhook ...