c# 异步 多线程
c# 到了现在6.0时代对于异步多线程也出了不少的类,从最开始thread到threadpool ,到后面的Task 到现在async/await 也经历了不少版本。今天一个一个来聊聊。
什么是异步什么是多线程
首先我们要明确异步和多线程不是一个概念,异步指向的是运行的逻辑顺序不是同步的。
而什么是多线程呢。这里就要说到进程和线程的概念了。算了这里不多说自行百度。多线程就是字面意思通过指令集同时操作不同的线程。打个比方把:我想喝到一杯牛奶我需要干什么,我是不是要先烧开水,然后拿奶粉,最后冲泡。那异步多线程就是我在烧水的同时去拿了奶粉 ,最后我在一起冲泡。就相当于开一个子线程,2个线程同时干不同的事情肯定比单个线程一步一步来要快。简单的来说就是拿cpu的性能去换时间。
c# Thread
了解了异步多线程的理念后那接下来我们再来聊聊c#Tread类。
public void main() { ThreadStart threadStart = new ThreadStart(()=>this.threadClick()); Thread thread = new Thread(threadStart); thread.Start(); } public string threadClick() { return $"threadClick{Thread.CurrentThread.ManagedThreadId}线程完成"; }
c# ThreadPool
public void main() { ThreadPool.QueueUserWorkItem((obj) => this.threadClick()) ; } public string threadClick() { return $"threadClick{Thread.CurrentThread.ManagedThreadId}线程完成"; }
c# Task
public void main() { Task task = new Task(() => { Console.WriteLine("aaaa"); }); task.Start(); Task.Run(() => { Console.WriteLine("aaaa"); }); }
c# TaskFactory
public void main() { Task.Factory.StartNew(() => { Console.WriteLine("aaaa"); }); }
c# async/await
public async Task GetTaskAsync() { await Task.Run(() => { Console.WriteLine("aaaa"); }); }