参考地址:
- https://www.cnblogs.com/zeroone/p/4397816.html
- https://www.jianshu.com/p/7a79c7a47d67 //讲的挺详细的,涉及到硬件的处理方法,CPU 、I/O的开销处理。
总结的说一下
- async 是用来修饰异步方法,await 是用来异步执行方法
- async/await 要同时使用,否则会当做同步方法
- 这个与Thread线程池的区别在于,Thread 是会不断的创建,销毁,而Task.Run()每次执行将不会立即创建一个新线程,而是到CLR线程池查看是 否有空闲的线程,有的话就取一个线程处理这个请求,处理完请求后再把线程放回线程池,这个线程也不会立即撤销,而是设置为空闲状态,可供线程池再次调度, 从而减少开销。
栗子
具体的详情请看 参考链接,这边只是提供一下如何使用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Threading;
using System.Threading.Tasks;
namespace TestApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("-------主线程启动-------");
Task<int> task = GetLengthAsync();
Console.WriteLine("Main方法做其他事情");
Console.WriteLine("Task返回的值" + task.Result);
Console.WriteLine("-------主线程结束-------");
}
static Task<int> GetLengthAsync()
{
Console.WriteLine("GetLengthAsync Start");
Task<int> task = Task<int>.Run(() => { string str = GetStringAsync().Result;
Console.WriteLine("GetLengthAsync End");
return str.Length; });
return task;
}
static Task<string> GetStringAsync()
{
return Task<string>.Run(() => { Thread.Sleep(2000); return "finished"; });
}
}
}