黑马训练营-异步编程之初识Task的学习

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

Task命名空间属于:System.Threading.Tasks,是微软在.NET中新增加的一个异步编程方法。

首页,你可以创建一个Task对象:

Task t1 = new Task(() => Console.Write("这是一个线程"));

然后你可以让他执行:

t1.Start();

你也可以将他们合并起来:

Task.Factory.StartNew(() => Console.Write("这也是一个立即执行线程!"));

现在我想让t1等等:

t1.Wait();

下面是一些Wait()方法的重载或类似方法示例:

//t1等了1秒种,然后又继续开始跑了
t1.Wait(1000);

//一个类似的WaitAll(),但你需要先创建几个测试用的线程
Task t2 = new Task(() => {
//一些代码
});
Task t3 = new Task(() => {
//还是一些代码
});

//可以用了
Task t4 = new Task(() => {
Task.WaitAll(t1, t2, t3);
Response.Write("t1,t2,t3都执行完了才会运行这哦!");
});

//另外一个类似方法: WaitAny()
Task t5 = new Task(() => {
Task.WaitAny(t1, t2, t3);
Response.Write("t1,t2,t3在赛跑,只要有一个执行完成,我就可以运行咯");
});

最后的最后,我们可以通过Task实例的Result属性来获取委托的返回值哦!

Task t0 = new Task(() => {
string SomeValue = "一个返回值哦!";
return SomeValue;
}

t0.Start();
Response.Write(t0.Result);
//最后显示的是 "一个返回值哦!"

一个FAQ:

问:Task提供了什么新特性?

答:与之前的异步操作对比,Task可以灵活地控制整个流程,使coder们能轻松掌握!WaitAll()和WaitAny()是其强大的根源(个人认为),也就是因为这两个类方法,使得线程与线程间的流程如此地清晰透明!

 






---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------
详细请查看:http://net.itheima.com/

posted @ 2012-03-22 22:14  Yorkie  阅读(232)  评论(0编辑  收藏  举报