任务和线程的区别
在我们了解 Task 之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在. net 4.0 之后被一种称为基于“任务的编程模型” 所冲击,因为 task 会比 thread 具有更小的性能开销,不过大家肯定会有疑惑,任务和线程到底有什么区别?
1:任务是架构在线程之上的,也就是说任务最终还是要抛给线程去执行。
2:任务跟线程不是一对一的关系,比如开 10 个任务并不是说会开 10 个线程,这一点任务有点类似线程池,但是任务相比线程池有很小的开销和精确的控制。
方式 1:
private static void Main(string[] args)
{
var t1 = new Task(() => TaskMethod("Task 1"));
System.Console.WriteLine(t1.Status);
t1.Start();
System.Console.WriteLine(t1.Status);
Task.WaitAll(t1);
System.Console.WriteLine(t1.Status);
}
private static void TaskMethod(string v)
{
System.Console.WriteLine(v);
}
D:\NutStoreCode\src\App>dotnet run
Created
WaitingToRun
Task 1
RanToCompletion
注:
任务的状态:
Start 之前为: Created
Start 之后为: WaitingToRun
方式 2:
private static void Main(string[] args)
{
Task.Run(() => TaskMethod("Task 2"));
}
private static void TaskMethod(string v)
{
System.Console.WriteLine(v);
}
方式 3:
private static void Main(string[] args)
{
var t3 = Task.Factory.StartNew(() => TaskMethod("Task 3"));
Task.WaitAll(t3); //等待所有任务结束
}
private static void TaskMethod(string v)
{
System.Console.WriteLine(v);
}
标签:异步,Task,Console,string,void,编程,t1,线程 From: https://www.cnblogs.com/zhuoss/p/18383718参考地址 www.donet5.com