苏飞论坛

标题: 多线程之Task入门快速上手 [打印本页]

作者: 范范    时间: 2018-12-31 12:50
标题: 多线程之Task入门快速上手
前言


    Task是从 .NET Framework 4 开始引入的一项基于队列的异步任务(TAP)模式,从 .NET Framework 4.5 开始,任何使用 async/await 进行修饰的方法,都会被认为是一个异步方法;实际上,这些异步方法都是基于队列的线程任务,从你开始使用 Task 去运行一段代码的时候,实际上就相当于开启了一个线程,默认情况下,这个线程数由线程池 ThreadPool 进行管理的。

1. Task 的使用方法

Task 的使用用方法非常简单,一行代码就可以开始一个异步任务

1.1 最简单的使用方式
[C#] 纯文本查看 复制代码
 static void EasyTask()
        {
            // 执行一个无返回值的任务
            Task.Run(() =>
            {
                Console.WriteLine("runing...");
            });

            // 执行一个返回 int 类型结果的任务
            Task.Run<int>(() =>
            {
                return new Random().Next();
            });

            // 声明一个任务,仅声明,不执行
            Task t = new Task(() =>
            {
                Console.WriteLine("");
            });
        }


上面的代码看起来非常简单,只需要一行代码就完成了一个异步任务线程,先不要去深究其背后的原理,对于新手来说,先解决能用,再去了解为什么可以这样使用,不然,一开始就失去了学习的信心


2.使用 TaskFactory 工厂开始异步任务

[C#] 纯文本查看 复制代码
static void Factory()
        {
            List<Task<int>> tasks = new List<Task<int>>();
            TaskFactory factory = new TaskFactory();
            tasks.Add(factory.StartNew<int>(() =>
           {
               return 1;
           }));
            tasks.Add(factory.StartNew<int>(() =>
            {
                return 2;
            }));

            foreach (var t in tasks)
            {
                Console.WriteLine("Task:{0}", t.Result);
            }
        }


执行上面的代码,输出结果如下
(, 下载次数: 115)