C#异步编程(一)

概要
这里记录一下初始学习异步编程。首先理解异步这个操作:举个例子来说吧。我们每个人可以做
很多事情(这里用:事情一,事情二,事情三),我们自己如果需要完成这三件事情的话,那么
基本上来说是要有顺序的一件一件的完成,也就是“一心不能二用”的道理。那么如果我们想提高
效率,快速的完成这三件事情呢,那我们按照人的惯性思维,找人帮忙做就行了。其实异步就跟
这个道理差不多。程序代码是由线程来调用执行的,其实一个线程就相当于一个人的意思。在程
序代码中为了解决文件IO的操作和网络请求等相关操作,我们会用对其采用脱离主线程,采用异
步新开启一个线程去操作文件IO或者Web请求,从而实现提高程序的效率,也避免了主线程迟迟
等待文件IO或者Web请求完成才能继续执行下一步代码的问题。

观察下面的代码和程序运行结果:
步骤一:新建一个控制器应用程序(.Net Framework4.5以上)项目
这里写图片描述
下面我们看看运行结果
这里写图片描述
简单说明:这一步就相当于一个人需要做几件事情的情形。一个人也就是一个线程,这里能够看见线程ID都是1。

步骤二:采用异步方法实现
代码如下:

static void Main(string[] args)
{
    #region 以往异步实现
    ////当前线程(因为词句代码放在哪个线程代码模块下执行就表示哪个线程进行休眠)开始休眠指定的时间。
    //Console.WriteLine("do something..."+Thread.CurrentThread.ManagedThreadId);
    ////模拟耗时操作
    //Thread.Sleep(3000);
    //Console.WriteLine("do other something..."+Thread.CurrentThread.ManagedThreadId);
    #endregion
    #region 
    Console.WriteLine("Main executing....currentThreadID为:"+Thread.CurrentThread.ManagedThreadId);
    DoSomething();
    Console.WriteLine("Main executed..currentThreadID为:" + Thread.CurrentThread.ManagedThreadId);
    #endregion
    Console.ReadKey(true);
}
/// <summary>
/// 执行耗时的异步操
/// 注意:
/// 代码实现中如果是异步,那么此方法名就需要(标记)成异步方法,即加上:aysnc修饰词
/// </summary>
private async static void DoSomething()
{
    //耗时操作有:IO/Web跳转等操作。
    //归结为:网络,文件操作是耗时操作。
    Console.WriteLine("耗时操作开始。。。currentThreadID为:" + Thread.CurrentThread.ManagedThreadId);
    //Thread.Sleep(3000);
    //换成异步执行代码:必须是一个任务类型
    await Task.Run(()=> {
        Console.WriteLine("延迟3秒进行中...currentThreadID为:" + Thread.CurrentThread.ManagedThreadId);
        Thread.Sleep(3000);
    });//委托方法
    Console.WriteLine("耗时操作结束。。。currentThreadID为:" + Thread.CurrentThread.ManagedThreadId);
}

这里我们首先看看执行以往的延迟方式:
这里写图片描述
下面看看运行结果:
这里写图片描述
分析:
从上面这个结果,执行的过程我们能够发现,“耗时操作结束。。。currentThreadID为:1”不执行完,“Main executed…currentThreadID为:1”始终处于等待中。

再看下面异步执行的情况:
这里写图片描述
运行结果
这里写图片描述

结果分析:
通过执行结果,我们能够看出,延迟操作交给了通过await标记的代码片段执行了,同时开启了新的线程,原来的 当前主线程ID为1,异步开启的新线程ID为3。

demo中包含Winform项目加载图片
Demo下载

  • 15
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值