C# thread,task,async和await的区别

Thread和Task的区别

无参无返回值线程:执行效果一致

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace SD_ZB_mqtt
{
    
    
    internal class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            Test();
            Console.ReadKey();
            
        }

        static void Test()
        {
    
    
            Thread task1 = new Thread(() =>
            {
    
    
                Thread.Sleep(1000*1);
                Console.WriteLine("1s");
            });
            Thread task2 = new Thread(() =>
            {
    
    
                Thread.Sleep(1000 * 2);
                Console.WriteLine("2s");
            });
            Thread task3 = new Thread(() =>
            {
    
    
                Thread.Sleep(1000 * 3);
                Console.WriteLine("3s");
            });
            Thread task4 = new Thread(() =>
            {
    
    
                Thread.Sleep(1000 * 4);
                Console.WriteLine("4s");
            });

            task4.Start();
            task3.Start();
            task2.Start();
            task1.Start();
            //打印1,2,3,4
        }

    }
}


internal class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            Test();
            Console.ReadKey();
            
        }

        static void Test()
        {
    
    
            Task task1 = new Task(() =>
            {
    
    
                Thread.Sleep(1000*1);
                Console.WriteLine("1s");
            });
            Task task2 = new Task(() =>
            {
    
    
                Thread.Sleep(1000 * 2);
                Console.WriteLine("2s");
            });
            Task task3 = new Task(() =>
            {
    
    
                Thread.Sleep(1000 * 3);
                Console.WriteLine("3s");
            });
            Task task4 = new Task(() =>
            {
    
    
                Thread.Sleep(1000 * 4);
                Console.WriteLine("4s");
            });

            task4.Start();
            task3.Start();
            task2.Start();
            task1.Start();
            //打印1,2,3,4
        }

无参构造执行顺序一致

有参数/有返回值:

注意,Thread和Task都可以使用lambda写法,解决参数传入问题

Thread thread1 = new Thread(()=>print("测试"));
Task thread1 = new Task(()=>print("测试"));

Thread带参数:

必须使用object,不然就会报错。而且Thread只有一个参数的方法,如果要传多个参数,只能先声明一个类,传入一个类进去

在这里插入图片描述

internal class Program
 {
    
    
      static void Main(string[] args)
      {
    
    
          Test();
          Console.ReadKey();
          
      }

      public static void Test()
      {
    
    
          Thread thread1 = new Thread(new ParameterizedThreadStart(print));
          thread1.Start("a");
      }

      public static void print(object msg)
      {
    
    
          Thread.Sleep(1000);
          Console.WriteLine(msg);
      }

  }

Thread 没有返回值

添加返回值会报错:返回类型错误。其它博客给出的方法是使用委托去阻塞,等待线程完成。
在这里插入图片描述

Task 带参数:要使用action委托,但是由于前文提到的lambda表达式,可以解决大部分入参问题,所以不在这里解释

猜你喜欢

转载自blog.csdn.net/qq_44695769/article/details/130719137