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"); });
}

 

posted @ 2021-03-05 11:15  YorkQi  阅读(300)  评论(0编辑  收藏  举报