首页 > 编程语言 > 详细

C# 线程知识--使用Task执行异步操作

时间:2016-01-21 13:30:13      阅读:262      评论:0      收藏:0      [点我收藏+]

原文地址:http://www.cnblogs.com/pengstone/archive/2012/12/23/2830238.html

感觉这篇文章不错,copy了一份;

   在C#4.0之前需要执行一个复杂的异步操作时,只能使用CLR线程池技术来执行一个任务。线程池执行异步任务时,不知道任务何时完成,以及任务的在任务完成后不能获取到返回值。但是在C#4.0中引人了一个的任务(System.Threading.Tasks命名空间的类型)机制来解决异步操作完成时间和完成后返回值的问题。

1.使用Task类创建并执行简单任务

通过使用Task的构造函数来创建任务,并调用Start方法来启动任务并执行异步操作。创建任务时,必须传递一个Action或Action<Object>类型的委托回调方法,可以选择的传递任务执行时说需要的数据对象等。Task类的构造函数如下:

 

    public Task(Action action);
        public Task(Action<object> action, object state);
        public Task(Action action, CancellationToken cancellationToken);
        public Task(Action action, TaskCreationOptions creationOptions);
        public Task(Action<object> action, object state, CancellationToken cancellationToken);
        public Task(Action<object> action, object state, TaskCreationOptions creationOptions);
        public Task(Action action, CancellationToken cancellationToken, TaskCreationOptions creationOptions);
        public Task(Action<object> action, object state, CancellationToken cancellationToken, TaskCreationOptions creationOptions);

 

  示例代码:

 
 static void Main(string[] args)
        {
            //先声明一个委托
            Console.WriteLine("主线程执行业务处理---开始.");
            Task task = new Task(() =>
            {
                Console.WriteLine("使用System.Threading.Tasks.Task执行异步操作----开始.");
                for (int i = 0; i < 10; i++)
                {
                    Console.WriteLine(i);
                }
                Console.WriteLine("使用System.Threading.Tasks.Task执行异步操作----结束.");
            });
            task.Start();
            Console.WriteLine("主线程执行其他处理---结束");


            //
            Console.ReadKey(false);
        }

  

  

结果:

主线程执行业务处理---开始.
主线程执行其他处理---结束
使用System.Threading.Tasks.Task执行异步操作----开始.
0
1
2
3
4
5
6
7
8
9
使用System.Threading.Tasks.Task执行异步操作----结束.

 2.等待任务的完成并获取返回值

使用任务执行异步操作时,最主要的是要后的任务完成时的返回值。在任务类中有一个实例方法Wait(有许多重载版本)他能等待任务的完成,我们也可以通过Task类的派生类Task<TResult>创建一个异步任务,并指定任务完成时返回值的类型,这样可以通过Task<TResult>的实例对象获取到任务完成后的返回值。创建一个异步任务并执行0到100求和操作返回最后的计算结果,示例代码:

Console.WriteLine("主线程执行业务处理---开始.");
            Task<int> task1 = new Task<int>(()=> {
                Console.WriteLine("使用System.Threading.Tasks.Task执行异步操作----开始.");
                int sum = 0;
                for (int i = 0; i < 50; i++)
                {
                    sum += i;
                }
                return sum;
            });
            task1.Start();
            Console.WriteLine("主线程执行其他处理---结束");
            //等待任务的完成执行过程。
            task1.Wait();
            Console.WriteLine("任务执行结果:{0}", task1.Result.ToString());

  执行结果:

主线程执行业务处理---开始.
主线程执行其他处理---结束
使用System.Threading.Tasks.Task执行异步操作----开始.
任务执行结果:1225

 

C# 线程知识--使用Task执行异步操作

原文:http://www.cnblogs.com/alphafly/p/5147843.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!