Task使用小结

摘要:
任务是.NET引入的数据任务处理的工作类。任务的使用也被越来越多的人所解释。这里,只介绍了Task的部分用法;1.任务简单创建--无返回值Task。工厂StartNew(()=˃{Console.WriteLine('HelloWorld');})--返回字符串类型Task。工厂StartNew()=˃{Console.WriteLine('HelloWorld

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执行完成,该操作是同步完成;

免责声明:文章转载自《Task使用小结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇pcap文件格式及文件解析处理大并发量订单处理的 KafKa部署总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

mini.DataGrid使用说明

√√√ ajaxOptionsObjectajax配置对象。√√√ idFieldString是行数据的唯一字段。设置为“client”之后,客户端将排序√√√√ totalCountNumber记录总数√√√ defaultColumnWidthNumber默认列宽100√√√√ showColumnsBoolean显示标头true√√√√ showPag...

001_Three.js中的跨域问题

】当请求的资源和请求脚本不在同一域中时,将发生跨域。有关详细信息,请参见链接。这是一个需要进一步考虑的问题。它是一个装载机。它加载本地资源。为什么要跨域请求?...

pycharm最新版本激活码(永久有效) python安装教程

输入python以查看当前版本的python。您可以输入“print'helloworld”并单击下载以启动PyCharm://pan.baidu.com//1eVdm4dUPKn3ZY_Xj kqNXw提取代码:l83f2,下载破解补丁(版本2018.3.5)下载链接至地址:...

安装pygame

在python3中安装pygame库。一段时间后,您可以看到安装成功,并且可以导入pygame...

nginx做本地目录映射

nginx做本地目录映射有时候需要访问服务器上的一些静态资源,比如挂载其他设备上的图片到本地的目录,而本地的目录不在nginx根目录下,这个时候就需要简单的做一下目录映射来解决,比如想通过浏览器http://ip/image/2016/04/29/10/abc.jpg访问到系统目录/image_data/2016/04/29/10/abc.jpg需要在ngi...

Nginx 对客户端请求的限制

本文记录了Nginx静态web服务器对客户端请求的限制的配置项。附加了禁止GET方法和HEAD方法的配置。limit_ exceptGET{allow192.168.1.0/32;denyall;}2) 最大HTTP请求包语法:client_max_body_sizesize;默认值:client_max_body_size1m;配置块:当http、服务器和...