异步处理语法糖
- 方便进行开启异步任务并等待结果完成的操作
- async 表明该方法是异步方法
- await 表面要等待task完成再执行后续代码
特性
- async 修饰method,调用async的方法会开启新的线程
- await
- 线程
async void TestVoid()
{
Console.WriteLine("TestVoid 1()方法里面线程ID: {0}", Thread.CurrentThread.ManagedThreadId);
await Task.Run(() =>
{
Thread.Sleep(2000);
Console.WriteLine("TestVoid Run()方法里面线程ID: {0}", Thread.CurrentThread.ManagedThreadId);
return "我是返回值";
});
//后面的代码仍然是工作者线程在执行
Console.WriteLine("TestVoid 2()方法里面线程ID: {0}", Thread.CurrentThread.ManagedThreadId);
}
使用
async Task TestVoid()
{
await Task.Run(() =>
{
Thread.Sleep(2000);
Console.WriteLine("TestVoid()方法里面线程ID: {0}", Thread.CurrentThread.ManagedThreadId);
return "我是返回值";
});
}
async Task<int> ComputeValue()
{
return await Task.Run(() =>
{
Thread.Sleep(1);
return 0;
});
}
//顺序执行,TestVoid里面的耗时操作完成之前后面的代码不会执行,即ComputeValue()不会执行
await TestVoid();
var valu = await ComputeValue();
//不await,TestVoid直接执行,就像开启了一个新线程不等待结果一样
TestVoid();
var valu = await ComputeValue();