码迷,mamicode.com
首页 > Windows程序 > 详细

Task C#

时间:2014-11-23 00:40:15      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   使用   sp   

Task 在C#中表示一个异步操作。

作为一个方法的返回类型时通常与async同时出现;而async又与await正好是一对。

Task 实例可以用各种不同的方式创建。 最常见的方法是使用任务的 Factory 属性检索可用来创建用于多个用途的TaskFactory实例。 例如,要创建运行操作的 Task,可以使用工厂的StartNew方法:Task.Factory.StartNew(Action) ;.net 4.5又添加了Task.Run(Action) 想了解更多 请猛戳 这里 有更多示例代码。

通常通过上面两个方法实例的Task已经开始运行,但是它不一定是新起一个线程,而是去查找闲置线程并在此闲置的线程上去运行。

 

 static async Task T2()
        {
            var t1 = T1();
            var t2 = Task.Run(delegate {
                for (int i = 1111; i < 2000; i++)
                {
                    Console.WriteLine(i);
                }
            });
            await t1;
            await t2;
        }

        static async Task T1()
        {
            await Task.Run(delegate {
                for (int i = 0; i < 1000; i++)
                {
                    Console.WriteLine(i);
                }
            });
        }

如上代码,当我们直接调用T2方法的时候 运行到var t1=T1();时已经将T1里面的任务加入到执行队列中去;可能不会马上执行,因为它还要去寻找闲置的线程。

运行到var t2=Task....(省略)时同样只是将其中的任务加入到执行队列中去,它们的任务可能是放在不同的线程中去运行的。然后再通过await去等待确定它们都执行完成。

都完成后再回到主线程(主线程只是指T2方法执行的线程)中来;

下面其实跟Task就没有直接关系了

bubuko.com,布布扣

图片中的提示可以看出,一个异步方法 在await Task 之前其实仍然是在进行同步运行的(可能不是很明显,但是我写过测试确实如此);只有在遇到了await Task的时候再将运行的任务异步操作。

 

小结

    我最讨厌小结、总结什么的了。

Task C#

标签:style   blog   http   io   ar   color   os   使用   sp   

原文地址:http://www.cnblogs.com/hmds/p/4116023.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!