• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C#Task的使用---Task的启动

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

.NET 4.0包含的新名称空间System.Threading.Tasks,它包含的类抽象出了线程功能。任务表示应完成的某个单元的工作。这个单元的工作可以在单独的线程中运行,也可以以同步的方式启动一个任务,这需要等待主调线程。使用任务不仅可以获得一个抽象层,还可以对底层线程进行许多控制。

启动任务

    1)、使用TaskFactory类的实例,在其中把TaskMethod()方法传递给StartNew方法,就会立即启动任务。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace TaskSamples
   8: {
class Program
  10:     {
void TaskMethod()
  12:         {
  15:         }
  16:  
string[] args)
  18:         {
//using task factory
new TaskFactory();
  21:             Task t1 = tf.StartNew(TaskMethod);
  22:             Console.ReadKey();
  23:          }
  24:     }
  25: }

运行结果如下所示:

 

2)、使用Task类的Factory属性,Task.Factory返回TaskFactory的默认实例。在其中把TaskMethod()方法传递给StartNew方法。这种方法实际和第一种方法是一样的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace TaskSamples
   8: {
class Program
  10:     {
void TaskMethod()
  12:         {
  16:  
  17:         
  15:         }
string[] args)
  19:         {
  20:            
//using the task factory via a task
  22:             Task t2 = Task.Factory.StartNew(TaskMethod);
  23:             Console.ReadKey();
  24:          }
  25:     }
  26: }

3)、使用Task类的实例,然后调用Start方法启动任务。运行结果和上面两种方式相同。在使用Task类时,除了调用Start()方法,还可以调用RunSynchronously()方法。这样任务也会启动,但在调用者的当前线程中,它正在运行的时候,调用者需要一直等待到该任务结束。默认情况下,任务是异步运行的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace TaskSamples
   8: {
class Program
  10:     {
void TaskMethod()
  12:         {
  15:         }   
  16:              
string[] args)
  18:         {             
////using Task constructor
new Task(TaskMethod);
  21:             t3.Start();
  22:             Console.ReadKey();
  23:          }
  24:     }
  25: }

使用Task类的构造函数和TaskFactory类的StartNew()方法时,都可以传递TaskCreationOptions枚举中的值。设置LongRunning选项,可以通知任务调度器,该任务需要较长时间执行,这样调度器更可能使用新线程。如果该任务应关联到父任务上,而父任务取消了,则该任务也应取消,此时应设置AttachToParent选项。PerferFairness的值表示,调度器应提取出已在等待的第一个任务。如果一个任务在另一个任务内容创建,这就不是默认情况。如果任务使用了子任务创建了其他工作,子任务就优先于其他任务。它们不会排在线程池队列中的最后。如果这些任务应以公平的方式与所有其他任务一起处理,就设置该选项为PerferFairness。

new Task(TaskMethod,TaskCreationOptions.PreferFairness);
   2:           t3.Start();

http://www.cnblogs.com/jerry01/archive/2012/09/14/2684914.html

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#导出Excel的单元格属性设置【转载】发布时间:2022-07-10
下一篇:
关于在C#中弹出窗口并跳转页面发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap