C# 异步多线程

多线程的概念和应用

/// <summary>
/// 1.进程和线程的特点
/// 2.委托启用多线程
/// 3.多线程的特点:不卡主线程,速度快无秩序
/// 4.异步的回调和状态参数
/// 5.异步等待的三种方式
/// 6.异步的返回值
/// 
/// 进程 和线程的 是计算机概念
/// 进程:运行时 占用全部计算资源的总和
/// 线程:程序执行流的最小单位;任何操作都是由线程完成的;
///       线程是依托进程存在的,一个进可以包括多个线程;
///       线程也可以有自己的计算资源
/// 多线程:多个执行流同事运行
///         1.CPU 太快了,分时间片--上线文切换(架子环境 -- 计算 -- 保存环境)
///           微观视角,一个核同一时刻只能执行一个线程;
///           宏观视角,多线程并发
///         2:多核(多CPU),可以独立工作
///            四核八线程 --- 核是物理核,线程是虚拟核
///            
/// Thread 是C# 语言对线程的封装
/// 
/// 同步 :完成计算后,再进入下一行
/// 异步 :不会等待方法的完成,会直接进入下一行
/// 
/// 1、同步方法卡界面,主线程忙于计算
///    异步多线程方法不卡界面,主线程完了,计算任务交给子线程去做
///    winform 提升用户体验;web 一个业务操作后要发邮件,异步发送邮件
/// 2、同步方法慢,只有一个线程干活
///    异步多线程方法快,因为多线程并发运算;
///    便是不是线程越多越好,并非线程增长,a资源换时间   多线程也有时间管理成本
/// 3.异步多线程 的应用
///    1)多个独立任务同时运行;
/// 4.异步多线程无序,启动无序,结束无序,执行时间不确定
/// </summary>
View Code

异步操作方式

IAsyncResult async = null; //异步操作的状态
Action<string> action = this.Calc; //创建实例
AsyncCallback callback = _ia =>
{
    Console.WriteLine(_ia == async);//判断 callback 的 参数 IAsyncResult 和 委托异步操作的实例是否是一个;Result 是一个
    Console.WriteLine(_ia.AsyncState);//调用异步状态 “wuyc”
    Console.WriteLine("已经结束");
};
async = action.BeginInvoke("Show1_", callback, "wuyc");//异步调用
action.EndInvoke(async);//使 async 异步调用 完成的时候才能继续往下执行
异步操作

 

posted @ 2018-08-19 15:27  码到世界末日  阅读(256)  评论(0编辑  收藏  举报