C# Task用法

原文来自:

https://www.cnblogs.com/scmail81/archive/2018/08/20/9508448.html

本文做了一些添加。谢谢原作者。

1、Task的优势
  ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如:
  ◆ ThreadPool不支持线程的取消、完成、失败通知等交互性操作;
  ◆ ThreadPool不支持线程执行的先后次序;
  以往,如果开发者要实现上述功能,需要完成很多额外的工作,现在,FCL中提供了一个功能更强大的概念:Task。Task在线程池的基础上进行了优化,并提供了更多的API。在FCL4.0中,如果我们要编写多线程程序,Task显然已经优于传统的方式。
  以下是一个简单的任务示例:

using System;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Task t = new Task(() =>
            {
                Console.WriteLine("任务开始工作……");
                //模拟工作过程
                Thread.Sleep(5000);
            });
            t.Start();
            t.ContinueWith((task) =>
            {
                Console.WriteLine("任务完成,完成时候的状态为:");
                Console.WriteLine("IsCanceled={0}\tIsCompleted={1}\tIsFaulted={2}", task.IsCanceled, task.IsCompleted, task.IsFaulted);
            });
            Console.WriteLine("Run here.");
            Console.ReadKey();
        }
    }
}

2、Task的用法
  2.1、创建任务
  无返回值的方式
  方式1:
  var t1 = new Task(() => TaskMethod("Task 1"));
  t1.Start();
  Task.WaitAll(t1);//等待所有任务结束 
  注:
  任务的状态:
  Start之前为:Created
  Start之后为:WaitingToRun 


  方式2:
  Task.Run(() => TaskMethod("Task 2"));

     如果上面的例子改为如下:

 这就说明执行Run()方法的时候任务就已经开始执行了,没有必要再调用Start()方法。

   调用ContinueWith()方法是可以的。

      方式3:
  Task.Factory.StartNew(() => TaskMethod("Task 3")); 直接异步的方法 
  或者
  var t3=Task.Factory.StartNew(() => TaskMethod("Task 3"));
  Task.WaitAll(t3);//等待所有任务结束

        Task.Factory.StartNew和Task.Run有什么区别?       

        答案:https://www.cnblogs.com/wangwust/p/9493028.html
  注:
  任务的状态:
  Start之前为:Running
  Start之后为:Running

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值