C#任务Task应用详解

1、引用空间
System.Threading.Task
2、定义
Task类可以更好的控制并行操作,任务表示将完成的某个工作单元,该工作单元可以在单独的线程运行,可以以同步方式启动一个新任务。
3、启动任务的方式
任务处理程序
public static void TaskMethod(string o){
Console.WriteLine(“进入任务处理程序”+o);
}
(1)、使用实例化的TaskFactory类,在其中将TaskMethod方法传递给StartNew方法
var tf=new TaskFactory();
Task t1=tf.StartNew(TaskMethod, “using task factory”);
(2)、使用Task类的静态属性Factory来访问TaskFactory,以及调用StartNew方法
Task t2=Task.Factory.StartNew(TaskMethod, “factory via a task”);
(3)、用Task类的构造函数实例化Task对象,调用Task类的Start方法启动任务
Task t3=new Task(TaskMethod, “using a task constructor and start”);
t3.Start();
(4)、调用Task类的Run方法启动任务
Task t4=Task.Run(()=>TaskMethod(“using run method”));
Run方法没有可传递Action委托的重载版本,但通过传递Action类型的lambda表达式并在其实现中使用参数。
4、同步任务
private static void RunSynchronousTask(){
TaskMethod(“just the main thread”);
var t1=new Task(TaskMethod, “run sync”);
t1.RunSynchronously();
}
5、使用单独线程的任务
如果任务代码长时间运行,可使用TaskCreationOptions.LongRunning告诉任务调度器创建一个新线程。
var t1=new Task(TaskMethod,“long running”,TaskCreationOptions.LongRunning);
t1.Start();
6、任务结果返回
public static double TaskWithResult(object o){
List l=(List)o;
double d=0;
if(l[1]!=0){
d=l[0]/l[1];
}
return d;
}

public static void TaskWithResultDemo(){
var t1=new Task(TaskWithResult, l);
t1.Start();
Console.WriteLine(t1.Result);
}
7、连续任务
public static void TaskDoFirst(){
Console.WriteLine(“进入任务1处理程序”);
}
public static void TaskDoSecond(){
Console.WriteLine(“进入任务2处理程序”);
}
public static void ContinueTasks(){
Task t1=new Task(TaskDoFirst);
Task t2=t1.ContinueWith(TaskDoSecond);
Task t3=t1.ContinueWith(TaskDoSecond);
Task t4=t2.ContinueWith(TaskDoSecond, TaskContinuationOptions.OnlyOnFaulted);
t1.Start();
}
8、等待任务
WaitAll()方法阻塞调用任务,直到等待的所有任务完成为止;
WhenAll()返回一个任务,允许用async关键字等待结果,不会阻塞等待任务。
Task.Delay()方法指定从这个方法返回的任务完成前要等待的毫秒数。

  • 1
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大浪淘沙胡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值