C#异步编程的实现方式(4)——Task任务
来源:互联网 发布:程序员 显示器4k 编辑:程序博客网 时间:2024/06/14 09:13
C#异步编程的实现方式(4)——Task任务
#1楼26480062013/4/2 10:15:29 2013-04-02 10:15 nx288882
.Net Framework 4.0新增了一个System.Threading.Tasks命名空间,它包含的类提供了任务的相关操作。使用任务不仅可以获得一个抽象层,还能对底层线程进行很多统一的控制操作。这里先介绍一下Task的简单使用。
最基本的是知道怎么启动一个Task。
1、Task类构造函数
使用Task类的构造函数。实例化Task对象时,任务不会立即运行,而是指定Created状态。接着调用Task类的Start()方法来启动任务。使用Task类时,除了调用Start()方法,还可以调用RunSynchronously()方法。这样,任务也会启动,但是同时调用。默认情况下,任务是异步运行的。
Task类的构造函数接收一个无参无返回值的委托:
1: Task task = new Task(TaskMethod);
2: task.Start();
下面是TaskMethod方法:
1: static void TaskMethod()
2: {
3: for (int i = 0; i < 10; i++)
4: {
5: Console.WriteLine(String.Format("Running in a task. Task ID: {0}", Task.CurrentId));
6: Thread.Sleep(500);
7: }
8: }
方法里用Task.CurrentId属性取得当前任务ID。下面是主线程:
1: static void Main(string[] args)
2: {
3: Task task = new Task(TaskMethod);
4: task.Start();
5:
6: for (int i = 0; i < 10; i++)
7: {
8: Console.WriteLine("Running in main thread.");
9: Thread.Sleep(500);
10: }
11:
12: Console.Read();
13: }
如果要往线程里传递参数,Task构造函数提供的重载,可以传入一个object类型的参数:
1: Task task = new Task(TaskMethodWithParameter, "Hello world");
2: task.Start();
下面是带参的线程方法:
1: static void TaskMethodWithParameter(object param)
2: {
3: for (int i = 0; i < 10; i++)
4: {
5: Console.WriteLine(String.Format("Running in a task. Parameter: {0}", param));
6: Thread.Sleep(500);
7: }
8: }
2、TaskFactory类
使用实例化的TaskFactory类,在其中把TaskMethod方法传递给StartNew()方法,就会立即启动任务。
1: TaskFactory tf = new TaskFactory();
2: tf.StartNew(TaskMethod);
3、Task.Factory属性
Task类提供了一个Factory静态属性,这个属性返回一个TaskFactory对象。
1: Task task = Task.Factory.StartNew(TaskMethod);
后面的文章将介绍Task中的连续任务与层次任务
参考资料:《C#高级编程》,http://developer.51cto.com/art/200908/145541.htm
本文源代码:
分类: C#编程
好文要顶关注我 收藏该文联系我
0
2
(请您对文章做出评价)
«上一篇:C#异步编程的实现方式(3)——ThreadPool线程池
»下一篇:C#异步编程的实现方式(5)——连续任务
»下一篇:C#异步编程的实现方式(5)——连续任务
posted @ 2012-08-11 20:05 Mysterious One 阅读(12321) 评论(1)编辑 收藏
评论列表
谢谢楼主分享~哈哈
0 0
- C#异步编程的实现方式(4)——Task任务
- [深入学习C#]C#实现多线程的方式:Task——任务
- C#异步编程的实现方式(3)——ThreadPool线程池
- Android菜鸟的成长笔记(13)——异步任务(Async Task)
- Android菜鸟的成长笔记(13)——异步任务(Async Task)
- C#多线程编程Task任务
- C# 异步线程任务使用Task await
- C#中Task任务和Async、Await异步非阻塞方式
- odoo中定时任务task的实现方式
- Spring定时任务的实现方式--Spring Task
- C# 任务Task的使用
- C#异步编程之浅谈Task
- 初识C#异步编程Task,await,async
- C#异步编程之浅谈Task
- C#编程方式执行包的任务
- C++ concurrency::task实现异步编程(Windows)
- C# 异步编程3 TPL Task 异步程序开发
- C# 异步编程3 TPL Task 异步程序开发
- eclipse查看版本
- 如何手动添加gitignore
- springmvc的@RequestMapping
- 搜索一个class或者方法或者id写在哪个JS或CSS里面
- java反射机制详解及应用
- C#异步编程的实现方式(4)——Task任务
- size函数
- 将远程的git文件下载到本地
- http://www.hainiaowo.com/ask/detail-8974-1
- No Retrofit annotation found
- Ubuntu安装KVM
- Hibernate中的Entity类之间的继承关系之二SINGLE_TABLE
- windows下安装numpy,scipy遇到的问题总结
- javascript 判断数组中的重复内容的两种方法(修复BUG) by FungLeo