Task C#

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就没有直接关系了

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

 

小结

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

posted on 2014-11-23 00:17  黑面大生  阅读(4653)  评论(1编辑  收藏  举报

导航