• Task使用小结


    Task是.NET推出数据任务处理的工作类,Task的使用也被越来越多的人讲解,这里仅仅介绍Task的部分使用介绍;

    1、Task简单创建

    --无返回值

    Task.Factory.StartNew(() =>{ Console.WriteLine('Hello World'); });
    --返回字符串类型
    Task.Factory.StartNew(()
    =>{ Console.WriteLine('Hello World'); return 'I'm OK !' });

    备注:Task还有Wait方法等待Task任务的完成之后,走下面代码;

    2、Task数据同步控制

    之所以说控制,是因为Task执行的时候,我们能够通过一个公用的参数变量来控制Task任务的进行,之前我们使用的方式是全局定义一个Bool类型的数据,通过判断该变量值来控制程序的进行;在Task中,我们可以使用CanCellationToken来控制,事例代码如下:

            static CancellationTokenSource CancellTokenSource = new CancellationTokenSource();
            
            static void MainTask()
            {
                Task.Factory.StartNew(() => {
                    while (!CancellTokenSource.IsCancellationRequested)
                    {
                        Console.WriteLine("Hello Good");
                    }
                }, CancellTokenSource.Token);
                CancellTokenSource.CancelAfter(3000);
            }

    当然CanCellationToken也是可以交叉使用,如下面事例代码:

            static CancellationTokenSource C1 = new CancellationTokenSource();
            static CancellationTokenSource C2 = new CancellationTokenSource();
            static CancellationTokenSource C3 = new CancellationTokenSource();
    
            static CancellationTokenSource CancellTokenSource = new CancellationTokenSource();
            
            
            static void MainTaskMuilte()
            {
                CancellTokenSource = CancellationTokenSource.CreateLinkedTokenSource(C1.Token, C2.Token, C3.Token);
    
                Task.Factory.StartNew(() => {
                    while (!CancellTokenSource.IsCancellationRequested)
                    {
                        Console.WriteLine("Hello Good");
                    }
                }, CancellTokenSource.Token);
                C3.CancelAfter(3000);//只要有一个CanCellationToken停掉,该语句就结束
            }

    3、Task的WhenAny和WhenAll方法介绍:

    WhenAny表示任意一个Task完成之后,返回这个Task对象,但是有时候我们需要等待任务的完成,比如竞赛,只有有一个人完成,WhenAny就会返回这个人内容(有点不太切合实际),WhenAll表示处理完成之后,返回所有对象实例,代码如下:

            public async void OpeartTask()
            {
               
                List<Task<string>> TaskList = new List<Task<string>>() {
                    Task.Factory.StartNew(()=> { return WriteHello(10); },C1.Token),
                    Task.Factory.StartNew(()=> { return WriteHello(20); },C1.Token),
                    Task.Factory.StartNew(()=> { return WriteHello(30); },C1.Token),
                    Task.Factory.StartNew(()=> { return WriteHello(40); },C1.Token)
                };
                //var Reuslt= await Task.WhenAll(TaskList);
                var Reuslt = await Task.WhenAny(TaskList);
                if (Reuslt.IsCompleted)
                {
                    Console.WriteLine("I'm "+Reuslt.Result+" OK,Other Must Stop");
                    C1.Cancel();
                }
    }    

    备注:等待的时候,要加上async 和 await;

     4、Task.AwaitAll等待所有Task执行完成,该操作是同步完成;

  • 相关阅读:
    【BZOJ5306】【HAOI2018】—染色(组合数学+NTT)
    【SCOI2018】—Numazu 的蜜柑(二次剩余)
    【SCOI2018】—Numazu 的蜜柑(二次剩余)
    多测师讲解自动化测试_rf节课内容_高级讲师肖sir
    多测师讲解自动化测试 _RF连接数据库_高级讲师肖sir
    多测师讲解自动化 _rf自动化需要总结的问题(2)_高级讲师肖sir
    多测师讲解selenium--常用关键字归纳-_高级讲师肖sir
    多测师讲解自动化测试_rf测试报告_高级讲肖sir
    多测师讲解自动化测试_rf运行无日志(解决方法)_高级讲肖sir
    多测师讲解rf--定位元素--高级讲师肖sir
  • 原文地址:https://www.cnblogs.com/xibei666/p/5729575.html
Copyright © 2020-2023  润新知