博客
关于我
浅学C#(25)——任务Task
阅读量:637 次
发布时间:2019-03-15

本文共 1285 字,大约阅读时间需要 4 分钟。

在C#中, ThreadPool是一个非常重要的任务安排器,它能够在后台安排需要完成的工作。任务提供了极大的灵活性,允许开发者定义连续的工作流程。可以根据需要定义任务的顺序,例如,一个任务完成后可以立即启动另一个任务。此外,任务还支持层次结构,父任务可以创建子任务,这样可以定义依赖关系。启动任务可以通过TaskFactory类或Task类的构造函数和Start()方法来实现。例如:```csharpstatic void TaskMethod(){    Console.WriteLine("running in a task");    Console.WriteLine("Task id: {0} {1}", Task.CurrentId, Thread.CurrentThread.ManagedThreadId);}TaskFactory tf = new TaskFactory();Task t1 = tf.StartNew(TaskMethod);

或者使用Task类的构造函数:

Task t3 = new Task(TaskMethod);t3.Start();

此外,还可以设置TaskCreationOptions来指定任务的特定行为,如设置LongRunning选项,通知任务调度器该任务需要长时间运行,让调度器更可能使用新线程。

如果一个任务关联到父任务,而父任务被取消,子任务也会被取消。为了确保多个任务能公平运行,可以设置 PreferFairness选项。任务的连续执行可以通过ContinueWith方法实现,例如:

Task t1 = new Task(DoOnFirst);Task t2 = t1.ContinueWith(DoOnSecond);

无论前一个任务是成功还是失败,后续任务都会在前一个任务结束时启动。可以通过TaskContinuationOptions来指定仅在任务成功或失败时启动后续任务。

任务层次结构允许多个子任务并行执行,并定义父子关系。父任务的状态会反映其等待子任务完成的情况。一旦所有子任务完成,父任务也会显示为完成。设置TaskCreationOptions.DetachedFromParent时,子任务将不再依赖父任务。

任务的结果可以通过Task类的泛型版本来定义返回值。例如,可以定义一个返回整数的任务:

Task
t = Task.Factory.StartNew(() => { /* 任务代码 */ });

这些信息可以帮助开发者理解如何在C#中使用Threadpool和任务异步编程来优化应用性能。

此外,关于并发控制,可以通过Synchronization属性将对象的成员同步化。对于需要读取和写入同时访问的资源,可以用ReaderWriterLockSlim实现更细粒度的锁定控制,允许多个读取器和一个写入器同时运行。

这些功能在开发多线程应用时非常有用,能够帮助提高效率并避免死锁。如在一个银行账户应用中,同步可以防止并发问题,确保交易的准确性。

转载地址:http://qjalz.baihongyu.com/

你可能感兴趣的文章
Error during export: Export job failed! sqoop遇到的错
查看>>
Error:scalac: bad option: '-make:transitive'
查看>>
微软xp壁纸rgb
查看>>
浏览器刷新页面
查看>>
代码错误信息,微信报错
查看>>
easyui日期处理(开始时间和结束时间)
查看>>
WPF画椭圆
查看>>
XMLHttpRequest对象的一个简单运用示例
查看>>
java文件上传
查看>>
DHCP跨网段分配IP地址
查看>>
10.多线程与并行
查看>>
Callable中call方法和Runnable中run方法的区别
查看>>
IDEA上移除项目(逻辑删除)
查看>>
Docker方式启动tomcat,访问首页出现404错误
查看>>
Docker方式启动tomcat,访问首页出现404错误(第二篇 -- 将修改过的容器映射成镜像)
查看>>
【蓝桥杯】 java 大学c组 省赛 1、隔行变色
查看>>
BIM轻量化——浏览器展示 | 利用unity
查看>>
超市账单管理系统
查看>>
Springboot实现热部署
查看>>
composer 介绍、安装及基本使用方法
查看>>