`

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. Stooges – AI 孙燕姿

    很久没有写文章了... 最近听了 AI 孙燕姿 的一首歌 <一场游戏一场梦>, 有感而发. 所以特别写一篇记入一下我的这半年很火的 AI 的想法.

  2. IIS Reverse Proxy 反向代理

    前言 反向代理是这样的: 2 台 web server, A server, B server A server 是 public 的, 有 domain, 有 SSL (作为 B server 的代 ...

  3. 5G网元功能与接口

    5G网元功能与接口 5G移动通信整体网络架构 5G网络功能之间的信息交互可以基于两种方式表示:其一为基于服务表示:其二为基于点对点表示.实时部署时,也可以采用两种方式相结合的表示方式. 并不是所有的接 ...

  4. 痞子衡嵌入式:MCUBootUtility v6.3发布,支持获取与解析启动日志

    -- 痞子衡维护的 NXP-MCUBootUtility 工具距离上一个大版本(v5.3.0)发布过去一年了,期间痞子衡也做过三个版本更新,但不足以单独介绍.这一次痞子衡为大家带来了全新重要版本v6. ...

  5. 打开word报错“内存或磁盘空间不足,无法显示所请求的字体”

    起因: 有一个部门同学在打开服务器上的某个word文档时报错,但是打开本地word文档正常,经过网上查询资料后发现有可能是以下几种原因造成. 可能造成此报错的原因: 1. 文档被锁定 解决办法: 鼠标 ...

  6. [rCore学习笔记 029] 动态内存分配器实现-以buddy_system_allocator源码为例

    在上一部分,我们讲了动态内存分配器的原理是维护一个堆,而且是实现各种连续内存分配方法. 但是上一部分是直接通过引用了buddy_system_allocator来解决的问题. 那么对于内存分配算法有兴 ...

  7. 完美转发(模板)--T&&

    在C++模板编程中,完美转发(Perfect Forwarding)是一种技术,旨在保留函数参数的值类别,即在将参数传递到另一个函数时,无论参数是左值还是右值,都能够保持它的原始性质,而不会因为转发丢 ...

  8. USB协议详解第7讲(补充-USB帧和微帧剖析)

    1.概念 (1)USB2.0帧和微帧属于物理层时间基准的概念,低速和全速下每个帧时长为1ms,高速下每个帧又分为8个微帧,即每个微帧时长为125us. (2)USB主机和设备控制器同步后,每个微帧起始 ...

  9. 数据库故障处理优质文章汇总(含Oracle、MySQL、MogDB等)

    数据库告警.紧急问题处理这些项目对于大多数朋友来讲应该不陌生了.从墨天轮社区整理的"最受DBA欢迎的技术文档合辑"系列中可以发现,大家对"故障诊断专题"的热情居 ...

  10. iOS通知使用小结

    最近在项目开发中遇到了一个问题,首页底部菜单和底部子菜单的互动.需求是这样的,编辑状态下点击红色删除按钮,首页底部菜单移除该项,子菜单中对应项选中状态设置为未选中,典型的一对多方式.刚开始的方案是想通 ...