`

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("菜都做好了,大家快来吃饭!", "提示");
}); }
}

}

`

多线程编程入门Thread_Task_async_await简单秒懂的更多相关文章

  1. 转载自~浮云比翼:Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)

    Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)   介绍:什么是线程,线程的优点是什么 线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可 ...

  2. [电子书] 《Android编程入门很简单》

    <Android编程入门很简单>是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书.本书避免出现云山雾罩.晦涩难懂的讲解,代之以轻松活泼.由浅入 ...

  3. 微博,and java 多线程编程 入门到精通 将cpu 的那个 张振华

    http://down.51cto.com/data/2263476  java 多线程编程 入门到精通  将cpu 的那个 张振华 多个用户可以同时用一个 vhost,但是vhost之间是隔离的. ...

  4. [转]Delphi多线程编程入门(二)——通过调用API实现多线程

    以下是一篇很值得看的关于Delphi多线程编程的文章,内容很全面,建议收藏. 一.入门 ㈠. function CreateThread(    lpThreadAttributes: Pointer ...

  5. [转]Delphi多线程编程入门(一)

    最近Ken在比较系统地学习Delphi多线程编程方面的知识,在网络上查阅了很多资料.现在Ken将对这些资料进行整理和修改,以便收藏和分享.内容基本上是复制粘贴,拼拼凑凑,再加上一些修改而来.各个素材的 ...

  6. Windows多线程编程入门

    标签(空格分隔): Windows multithread programming 多线程 并发 编程 背景知识 在开始学习多线程编程之前,先来学习下进程和线程 进程 进程是指具有一定独立功能的程序在 ...

  7. C++多线程编程入门之经典实例

    多线程在编程中有相当重要的地位,我们在实际开发时或者找工作面试时总能遇到多线程的问题,对多线程的理解程度从一个侧面反映了程序员的编程水平. 其实C++语言本身并没有提供多线程机制,但Windows系统 ...

  8. Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)

    介绍:什么是线程,线程的优点是什么 线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可以看作是Unix进程的表亲,同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间, ...

  9. linux多线程编程入门

    背景知识: 在前一个实训中我们介绍了进程,但有时人们认为用fork调用来创建新进程的代价太高.在这种情况下,如果能让一个进程同时做零件事情或至少看起来是这样将会非常有用.而且,你可能希望能有两件或更多 ...

  10. Java 多线程编程两个简单的样例

    /** * @author gao */ package gao.org; public class RunnableDemo implements Runnable{ @Override publi ...

随机推荐

  1. RxJS 系列 – Filtering Operators

    前言 介绍完 RxJS 两大概念 Observable 和 Subject 之后, 篇幅最大的就是各种 Operators 了. 这篇先介绍比较简单的 Filter Operators. 请先看完上面 ...

  2. Angular 学习笔记 work with zip (压缩文件格式)

    最近在做批量创建. 上回说到了 读写 excel, 那么就可以通过 excel 的资料来创建资料了.但是资料经常会有图片,而 excel 里面放图片有点不太好. 于是就想 upload excel 的 ...

  3. 痞子衡嵌入式:JLink命令行以及JFlash对于下载算法的作用地址范围认定

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是JLink命令行以及JFlash对于下载算法的作用地址范围认定. 最近痞子衡在给一个 RT1170 客户定制一个 Infineon Mi ...

  4. .NET 开源高性能 MQTT 类库

    前言 随着物联网(IoT)技术的迅猛发展,MQTT(消息队列遥测传输)协议凭借其轻量级和高效性,已成为众多物联网应用的首选通信标准. MQTTnet 作为一个高性能的 .NET 开源库,为 .NET ...

  5. 【赵渝强老师】Redis案例分析:用setbit统计活跃用户

    一.需求背景 首先,我们来看一下需求:网站统计用户登录的次数,具体如下: 网站有1亿个用户,有经常登录的,也有不经常登录的 如何来记录用户的登录信息 如何查询活跃用户:比如:一周内,登录3次的 二.使 ...

  6. 智慧医院IT运维方案,全局网络态势感知

    随着医疗卫生体制改革不断深化,卫生行业信息化应用不断普及,大数据.AI.医疗物联网等技术的应用,快速推动"智慧医院"建设.以HIS(医院信息系统).EMRS(电子病历系统).PAC ...

  7. USB总线-Linux内核USB3.0 Hub驱动分析(十四)

    1.概述 USB Hub提供了连接USB主机和USB设备的电气接口.USB Hub拥有一个上行口,至少一个下行口,上行口连接上一级的Hub的下行口或者USB主机,连接主机的为Root Hub,下行口连 ...

  8. HarmonyOS NEXT开发之ArkTS自定义组件学习笔记

    在HarmonyOS中,ArkTS提供了创建自定义组件的能力,允许开发者封装和复用UI代码.以下是关于自定义组件的详细介绍,包括创建自定义组件.页面和自定义组件的生命周期.自定义组件的自定义布局.冻结 ...

  9. 云原生周刊:Kubernetes Grafana 看板更新 | 2024.5.13

    开源项目推荐 Chart Testing Chart Testing 是用于测试 Helm 图表的工具.它旨在用于对拉取请求进行 lint 和测试.它会自动检测针对目标分支更改的图表. Cluster ...

  10. EAFP 与 LBYL 风格

    EAFP 与 LBYL 是两种"防御性处理机制",相信你一定接触过,只是可能没有深入思考过这个问题. 输入两个数,要输出相除后的结果: a, b = map(int, input( ...