注意:这个是.NET 4.5的特性,所以要求最低.NET版本为4.5。
大多数人还是使用的Thread来使用异步多线程操作,而很少有人使用Async、Await进行异步编程的。关于使用Async、Await可以跟写同步方法一样去异步编程。代码则就非常的清晰,就跟写普通的代码一样,不用关系如何去异步编程,也让很多初级程序员也能够异步编程了。下面是一个使用Thread 多线程实现的异步例子,以及一个使用Async与Await的异步例子,接下来我们再简单理解下Async与Await的相关技术说明。
Thread多线程异步编程例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class
Program
{
static
void
Main(
string
[] args)
{
Console.WriteLine(
"主线程测试开始.."
);
Thread th =
new
Thread(ThMethod);
th.Start();
Thread.Sleep(1000);
Console.WriteLine(
"主线程测试结束.."
);
Console.ReadLine();
}
static
void
ThMethod()
{
Console.WriteLine(
"异步执行开始"
);
for
(
int
i = 0; i < 5; i++)
{
Console.WriteLine(
"异步执行"
+ i.ToString() +
".."
);
Thread.Sleep(1000);
}
Console.WriteLine(
"异步执行完成"
);
}
}
|
以上代码运行效果如下图:
使用Async与Await进行异步编程
class Program { static void Main(string[] args) { Console.WriteLine("主线程测试开始.."); AsyncMethod(); Thread.Sleep(1000); Console.WriteLine("主线程测试结束.."); Console.ReadLine(); } static async void AsyncMethod() { Console.WriteLine("开始异步代码"); var result = await MyMethod(); Console.WriteLine("异步代码执行完毕"); } static async Task<int> MyMethod() { for (int i = 0; i < 5; i++) { Console.WriteLine("异步执行" + i.ToString() + ".."); await Task.Delay(1000); //模拟耗时操作 } return 0; } }
运行效果:
显而易见我们就跟写同步方法一样,完成了异步方法的编写,代码更清晰了。
只有拥有async才能在其内部使用await关键字。异步方法可以具有Task、Task<>或void的返回类型;
await关键字则是用于返回值是“可等待”类型(awaitable)的方法