温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

任务

发布时间:2020-04-09 17:26:32 来源:网络 阅读:352 作者:1473348968 栏目:编程语言

1.启动任务

    class Program
    {
        static void Main(string[] args)
        {
            //三种启动任务方式
            //第一种
            TaskFactory tf1 = new TaskFactory();
            Task t1 = tf1.StartNew(TaskMethod);
            //第二种
            Task t2 = Task.Factory.StartNew(TaskMethod);
            //第三种
            Task t3 = new Task(TaskMethod);
            t3.Start();
            Console.ReadKey();
        }
        private static void TaskMethod()
        {
            Console.WriteLine("Task ID:{0}", Task.CurrentId);
        }
    }

任务

2,连续任务

     class Program
    {
        static void Main(string[] args)
        {
            Task t1 = new Task(GetTask);
            Task t2 = t1.ContinueWith(NewTask);
            Task t3 = t2.ContinueWith(NewTask2);
            t1.Start();
            Console.ReadKey();
        }
        private static void GetTask()
        {
            Console.WriteLine("GetTask:{0}", Task.CurrentId);
            Thread.Sleep(1000);
        }
        private static void NewTask(Task t)
        {
            Console.WriteLine("NewTask:{0},pTask:{1}", Task.CurrentId, t.Id);
        }
        private static void NewTask2(Task t)
        {
            Console.WriteLine("NewTask2:{0},pTask:{1}", Task.CurrentId, t.Id);
        }
    }

任务

 

3,任务的层次结构

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

        private static void a1()
        {
            Task t = new Task(a2);
            Console.WriteLine("a1开始:{0}", t.Status);//a2任务状态:Created(该任务已初始化,但尚未被计划)
            t.Start();
            Console.WriteLine("a1过程:{0}", t.Status);//a2任务状态:WaitingToRun(该任务已被计划执行,但尚未开始执行)
            Thread.Sleep(3000);
            Console.WriteLine("a1结束:{0}", t.Status);//a2任务状态:RanToCompletion(成功执行了任务)
        }
        private static void a2()
        {
            Console.WriteLine("a2:{0}", Task.CurrentId);
            Task t = new Task(a3);
            t.Start();
        }
        private static void a3()
        {
            Console.WriteLine("a3:{0}", Task.CurrentId);
        }
    }

 任务

 

4,任务的结束

    class Program
    {
        static void Main(string[] args)
        {
            Task<string> t = new Task<string>(GetString, "你好");
            t.Start();
            Console.WriteLine(t.Result);
            Console.ReadKey();
        }
 
        private static string GetString(object s)
        {
            return s.ToString();
        }
    }

 任务

 

============================续.......................

任务类似于线程

 TaskStatus 枚举
成员名称说明
Canceled该任务已通过对其自身的 CancellationToken 引发 OperationCanceledException 对取消进行了确认,此时该标记处于已发送信号状态;或者在该任务开始执行之前,已向该任务的 CancellationToken 发出了信号。有关详细信息,请参阅任务取消
Created<?xml:namespace prefix="[default]" xhtml="" ns="http://www.w3.org/1999/xhtml">该任务已初始化,但尚未被计划。?xml:namespace>
Faulted由于未处理异常的原因而完成的任务。
RanToCompletion已成功完成执行的任务。
Running该任务正在运行,但尚未完成。
WaitingForActivation该任务正在等待 .NET Framework 基础结构在内部将其激活并进行计划。
WaitingForChildrenToComplete该任务已完成执行,正在隐式等待附加的子任务完成。
WaitingToRun该任务已被计划执行,但尚未开始执行。
            Task t = new Task(() =>
            {
                Thread.Sleep(10000);
                Console.WriteLine("Task:{0}", Task.CurrentId);
                Console.WriteLine("thread:{0}", Thread.CurrentThread.ManagedThreadId);
            });
            //开始执行任务
            t.Start();
            //等待任务完成(线程阻塞)
            t.Wait();
            //当处理完成任务之后输出
            if (t.Status == TaskStatus.RanToCompletion)
                Console.WriteLine("Main:{0}", Thread.CurrentThread.ManagedThreadId);
 
            Console.ReadKey();

任务

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI