异步编程(1)
使用 Async 和 Await 的异步编程
.net 官方文档中说讲的案例比较贴于生活便于理解。我这边做复习记录,就已日常编程需求做为案例。
官方文档参考下面链接:
docs.microsoft.com/zh-cn/dotne…
在工作中,有时候会遇到数据统计。我们的数据有很多分类。如果一个一个分类去处理的话,时间上来看就是累加的。如下面的代码:
using System;
using System.Threading;
namespace StudyRecordProject
{
class Program
{
static void Main(string[] args)
{
//统计 1 类
Console.WriteLine("开始统计 1 类");
var num1 = Statistics01();
//统计 2 类
Console.WriteLine("开始统计 2 类");
var num2 = Statistics02();
//统计 3 类
Console.WriteLine("开始统计 3 类");
var num3 = Statistics03();
// 统计全部结果
var num0 = num1 + num2 + num3;
Console.WriteLine(num0);
Console.WriteLine("结束统计");
}
/// <summary>
/// 统计 1
/// </summary>
/// <returns></returns>
static int Statistics01()
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000);
}
Console.WriteLine("我是统计 1 类,用时 10 秒");
return 10;
}
/// <summary>
/// 统计 2
/// </summary>
/// <returns></returns>
static int Statistics02()
{
for (int i = 0; i < 20; i++)
{
Thread.Sleep(1000);
}
Console.WriteLine("我是统计 2 类,用时 20 秒");
return 20;
}
/// <summary>
/// 统计 3
/// </summary>
/// <returns></returns>
static int Statistics03()
{
for (int i = 0; i < 30; i++)
{
Thread.Sleep(1000);
}
Console.WriteLine("我是统计 3 类,用时 30 秒");
return 30;
}
}
}
运行完上面的代码后,就需要 60 秒,那么我们用异步让上面的 3 件事 同时去做,这样就会大大的提升效率。
using System;
using System.Threading;
using System.Threading.Tasks;
namespace StudyRecordProject
{
class Program
{
static async Task Main(string[] args)
{
//统计 1 类
Console.WriteLine("开始统计 1 类");
var num1 = Statistics01();
//统计 2 类
Console.WriteLine("开始统计 2 类");
var num2 = Statistics02();
//统计 3 类
Console.WriteLine("开始统计 3 类");
var num3 = Statistics03();
// 统计全部结果
var num0 = await num1 + await num2 + await num3;
Console.WriteLine(num0);
Console.WriteLine("结束统计");
}
/// <summary>
/// 统计 1
/// </summary>
/// <returns></returns>
static async Task<int> Statistics01()
{
//等待 1 毫秒
await Task.Delay(1);
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
Thread.Sleep(1000);
}
Console.WriteLine("我是统计 1 类,用时 10 秒");
return 10;
}
/// <summary>
/// 统计 2
/// </summary>
/// <returns></returns>
static async Task<int> Statistics02()
{
//等待 1 毫秒
await Task.Delay(1);
for (int i = 0; i < 20; i++)
{
Thread.Sleep(1000);
}
Console.WriteLine("我是统计 2 类,用时 20 秒");
return 20;
}
/// <summary>
/// 统计 3
/// </summary>
/// <returns></returns>
static async Task<int> Statistics03()
{
//等待 1 毫秒
await Task.Delay(1);
for (int i = 0; i < 30; i++)
{
Thread.Sleep(1000);
}
Console.WriteLine("我是统计 3 类,用时 30 秒");
return 30;
}
}
}
用异步执行后,就只需要 30 秒即可,大大提升了效率。
欢迎进qq群交流:704028989