怪物奇妙物语

宇宙无敌超级美少男的怪物奇妙物语

首页 新随笔 联系 管理

任务和线程的区别

在我们了解 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);
}

参考地址 www.donet5.com

posted on 2024-08-27 23:10  超级无敌美少男战士  阅读(3)  评论(0编辑  收藏  举报