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 没有返回值
添加返回值会报错:返回类型错误。其它博客给出的方法是使用委托去阻塞,等待线程完成。