c# 线程中任务Task的实际运用
2014-01-01 14:27
447 查看
应用场景:如果两个函数执行没有先后关系,以及不存在彼此依赖,那么可以在后台开启线程任务让他们同步执行,这样可以节省不少时间。
请看下面例子:
执行后效果如下:
msg:
同步运行...
run1:265ms
run2:528ms
总时间:528ms
开启Task后...
总时间:327ms
不过如果内部函数抛出异常的话,task是不太能捕获到异常信息的,需要手工处理。
请看下面例子:
[TestMethod()] public void test() { var d = DateTime.Now; var msg = "同步运行..."; run1(); msg += "\nrun1:" + (DateTime.Now - d).TotalMilliseconds + "ms"; run2(); msg += "\nrun2:" + (DateTime.Now - d).TotalMilliseconds + "ms"; msg += "\n总时间:" + (DateTime.Now - d).TotalMilliseconds + "ms"; msg += "\n开启Task后..."; d = DateTime.Now; Task<bool> checkHotelTask = Task.Factory.StartNew<bool>(() => run1()); Task<bool> checkFlightTask = Task.Factory.StartNew<bool>(() => run2()); if (checkHotelTask != null) { checkHotelTask.Wait(); } if (checkFlightTask != null) { checkFlightTask.Wait(); } if (checkHotelTask != null) { bool v1 = checkHotelTask.Result; } if (checkFlightTask != null) { bool v2 = checkFlightTask.Result; } msg += "\n总时间:" + (DateTime.Now - d).TotalMilliseconds + "ms"; } private bool run1() { for (int i = 0; i < 10000; i++) { for (int j = 0; j < 10000; j++) { } } return true; } private bool run2() { for (int i = 0; i < 10000; i++) { for (int j = 0; j < 10000; j++) { } } return true; }
执行后效果如下:
msg:
同步运行...
run1:265ms
run2:528ms
总时间:528ms
开启Task后...
总时间:327ms
不过如果内部函数抛出异常的话,task是不太能捕获到异常信息的,需要手工处理。
相关文章推荐
- C# 使用 Task 替换 ThreadPool ,异步监测所有线程(任务)是否全部执行完毕
- (转).NET 4.5中使用Task.Run和Parallel.For()实现的C# Winform多线程任务及跨线程更新UI控件综合实例
- C# 线程知识--使用Task执行异步操作
- Thinking in java中创建线程任务Task的基本方法
- 1:java.util.Timer类是一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。 2:TimerTask类是由 Timer 安排为一次执行或重复执行的任
- [转]C# 线程知识--使用Task执行异步操作
- C# 执行固定个数任务自行控制进入线程池的线程数量,多任务同时但是并发数据限定
- ThreadPoolTaskExecutor 多线程分解执行耗时任务与单线程串行执行简单比较
- C# 线程知识--使用Task执行异步操作
- 《CLR Via C# 第3版》笔记之(十九) - 任务(Task)
- c#网络编程之TCP/IP(一)C#线程任务基础Thread
- C#基础:使用Task创建任务
- C#基础之--线程、任务和同步:一、异步委托
- 通过代码学习C#&.NET——委托使用(线程、任务)
- C#+TaskScheduler(定时任务)实现定时自动下载
- 《CLR via C#》之线程处理——任务调度器
- C#中Task任务和Async、Await异步非阻塞方式
- [深入学习C#]C#实现多线程的方式:Task——任务
- Hadoop MapReduce之ReduceTask任务执行(二):GetMapEventsThread线程
- C#使用定时任务框架Windows.TaskSchedule.exe安装控制台应用程序创建的Windows服务