首页 > 编程语言 >多线程编程入门Thread_Task_async_await简单秒懂

多线程编程入门Thread_Task_async_await简单秒懂

时间:2024-11-21 22:31:55浏览次数:1  
标签:MessageBox Task 友情 Thread Show Sleep 多线程

`
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 多线程编程入门Thread_Task_async_await简单秒懂
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

    /// <summary>
    /// 单线程做菜(会卡界面,窗口不能拖动,其他按钮不能点击,因为这里用的主线程就是UI线程)
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnSingleThread_Click(object sender, EventArgs e)
    {
        Thread.Sleep(3000);
        MessageBox.Show("素材做好了", "友情提示");
        Thread.Sleep(5000);
        MessageBox.Show("荤菜做好了", "友情提示");
    }

    /// <summary>
    /// Thread创建线程(开了新线程不会卡界面了)
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnThread_Click(object sender, EventArgs e)
    {
        Thread t1 = new Thread(_ =>
        {
            Thread.Sleep(3000);
            MessageBox.Show("素材做好了", "友情提示");
            Thread.Sleep(5000);
            MessageBox.Show("荤菜做好了", "友情提示");
        });

        t1.Start();
    }

    /// <summary>
    /// Task创建线程(推荐这种方式创建线程,性能会更好,管理会更方便)
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnTask_Click(object sender, EventArgs e)
    {
        Task.Run(() =>
        {
            Thread.Sleep(3000);
            MessageBox.Show("素材做好了", "友情提示");
            Thread.Sleep(5000);
            MessageBox.Show("荤菜做好了", "友情提示");
        });
    }

    /// <summary>
    /// 两个线程同时处理(两个任务并行运行,好处是利用cpu的多核,每个核心做一个事情,可以大大提高效率)
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnWith_Click(object sender, EventArgs e)
    {
        Task.Run(() =>
        {
            Thread.Sleep(3000);
            MessageBox.Show("素材做好了", "友情提示");
        });

        Task.Run(() =>
        {
            Thread.Sleep(5000);
            MessageBox.Show("荤菜做好了", "友情提示");
        });
    }

    /// <summary>
    /// 无顺序执行,这里会先执行主线程的"菜都做好了,大家快来吃饭!"
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnNon_Click(object sender, EventArgs e)
    {
        Task.Run(() =>
        {
            Thread.Sleep(3000);
            MessageBox.Show("素材做好了", "友情提示");
        });

        Task.Run(() =>
        {
            Thread.Sleep(5000);
            MessageBox.Show("荤菜做好了", "友情提示");
        });

        MessageBox.Show("菜都做好了,大家快来吃饭!", "提示");
    }


    /// <summary>
    /// 异步,有顺序的执行,等待一个线程执行完了,才能继续往下面执行
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private async void btnNext_Click(object sender, EventArgs e)
    {
        await Task.Run(() =>
        {
            Thread.Sleep(3000);
            MessageBox.Show("素材做好了", "友情提示");
        });

        await Task.Run(() =>
        {
            Thread.Sleep(5000);
            MessageBox.Show("荤菜做好了", "友情提示");
        });

        MessageBox.Show("菜都做好了,大家快来吃饭!", "提示");

    }

    /// <summary>
    /// 两个线程并行处理完后再执行
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnTongshi_Click(object sender, EventArgs e)
    {

        List<Task> ts = new List<Task>();

        ts.Add(Task.Run(() =>
        {
            Thread.Sleep(3000);
            MessageBox.Show("素材做好了", "友情提示");
        }));

        ts.Add(Task.Run(() =>
        {
            Thread.Sleep(5000);
            MessageBox.Show("荤菜做好了", "友情提示");
        }));

        //等待所有任务都执行完成后,再来做另外的事情
        Task.WhenAll(ts).ContinueWith(t =>  //t:是前一个任务里面的信息,也就是说后续的任务可以得到前一个任务里的信息
        {
            MessageBox.Show("菜都做好了,大家快来吃饭!", "提示");
        });

    }
}

}

`

标签:MessageBox,Task,友情,Thread,Show,Sleep,多线程
From: https://www.cnblogs.com/Wulinhai/p/18561699

相关文章

  • MySQL 主从复制之多线程复制
    目录一、MySQL多线程复制的背景二、MySQL5.5主从复制1、原理2、部署主从复制2.1、主节点安装配置MySQL5.52.2、从节点安装配置MySQL5.53、检查主从库server_id和log_bin配置4、创建主从复制用户5、获取主库的二进制日志文件和位置6、配置从库连接主库参数并启动从库复制......
  • 2.1_6 线程的实现方式和多线程模型
    目录1、用户级线程历史背景代码实现​用户级线程的优缺点2、内核级线程概念内核级线程的优缺点3、多线程模型一对一模型多对一模型多对多模型总览1、用户级线程历史背景早期的操作系统(如:早期Unix)只支持进程,不支持线程。当时的“线程”是由线程库实现的 ......
  • @Slf4j实现多线程场景下每个线程日志独立输出
    1.配置logbak-spring.xml<?xmlversion="1.0"encoding="UTF-8"?><configurationscan="true"scanPeriod="5seconds"><!--定义日志文件的存储路径--><propertyname="LOGS_PATH"value="./l......
  • cornerstone中delayed_task,timer_task及scheduler源码解析
    1.概述delayed_task在cornerstone中充当一个base类,其延伸出的子类timer_task才是cornerstone用于实现定时器的类。而scheduler是用于实现延时效果的调度器。我们将按照delayed_task->timer_task->scheduler的顺序解析源码。2.delayed_task源码解析2.1成员变量分析classdel......
  • windows使用tasklist | findstr组合命令快速查进程
    命令解释tasklist列出进程|管道findstr/v过滤下面是系统自带的进程排除掉“notepad.execalc.execmd.exetasklist.exefindstr.exesvchost.exeSystemmsedge.exeRegistrysmss.execsrss.exewininit.exeservices.exeexplorer.exewinlogon.exelsass.exefo......
  • Qt - 多线程之并发(QtConcurrent)
    一、什么是QtConcurrent?Concurrent是并发的意思,而QtConcurrent同std一样,是一个命名空间(namespace)。提供了一些高级的API,使得在编写多线程的时候,无需使用低级线程原语,如读写锁,等待条件或信号。使用QtConcurrent编写的程序会根据可用的处理器内核数自动调整使用的线程数。对于QtC......
  • Qt - 多线程之线程同步
    一、线程为什么要同步使用两个线程对一个全局变量做累加,从0加到10,所以只要每个线程累加到5就行。代码如下所示:#include<QApplication>#include<QThread>#include<QDebug>//定义共享资源intsharedValue=0;//定义一个线程类classMyThread:publicQThread{pub......
  • Qt - 多线程之线程的开始、暂停、恢复、停止
    示例1在Qt中,可以使用QThread的线程控制功能来暂停和恢复一个线程。这里是一个简单的例子: #include<QThread>#include<QDebug>classWorkerThread:publicQThread{voidrun()override{qDebug()<<"Threadisrunning";//执行一些任务......
  • Java面试之多线程&并发篇(6)
    前言本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!产生死锁的四个必要条件?如何避免死锁?线程池核心线程数怎么设置呢?Java线程池中队列常用类型有哪些?似乎有点模糊了,那就大概看一下面试题吧。好记性不如烂键盘***12万字的java面试题整理******java核心面试知识整理***......
  • C++编程:通过多线程与协程优化阻塞型任务的调度性能
    文章目录0.引言1.多线程VS多线程+协程1.1示例1:使用传统的多线程进行矩阵乘法1.2.示例2:使用协程优化阻塞型任务3.分析与对比0.引言我们知道:多线程:适用于处理计算密集型任务或IO操作较少的场景,但会因为线程切换和创建销毁的开销而影响性能。协程:适用于处......