0

0

c# TaskCreationOptions 枚举有什么用

星降

星降

发布时间:2026-01-21 01:43:08

|

112人浏览过

|

来源于php中文网

原创

TaskCreationOptions 是向 TaskScheduler 传递调度偏好的提示枚举,除 AttachedToParent 必被遵守外,其余选项如 LongRunning(启用独占线程防池阻塞)、PreferFairness(倾向全局队列)、DenyChildAttach(拒绝子任务附加)、HideScheduler(禁用调度器继承)均可能被忽略。

c# taskcreationoptions 枚举有什么用

TaskCreationOptions 是给 Task 调度器的“建议纸”,不是命令书

它本质是一组 TaskCreationOptions 枚举值,用于向 TaskScheduler 传递调度偏好。但要注意:**绝大多数选项只是提示(hint),调度器可以忽略**——除了 AttachedToParent,这个一定会被遵守,因为它不依赖调度器逻辑,而是由 Task 运行时直接处理父子关系。

  • LongRunning:提示“这活儿要干很久”,调度器大概率会开一个**全新线程(非线程池线程)**来跑,避免卡住线程池
  • PreferFairness:让任务尽量进全局队列,减少本地队列饥饿,但实际公平性取决于当前 TaskScheduler 实现
  • DenyChildAttach:父任务主动“拒收”子任务的 AttachedToParent 请求,子任务自动降级为分离任务
  • HideScheduler:子任务不继承父任务的 TaskScheduler,强制用 TaskScheduler.Default

什么时候必须用 AttachedToParent?

当你需要父任务 Wait()await 时**自动等待所有子任务完成**,而不是手动 Task.WaitAll(...),就必须加 AttachedToParent

var parent = new Task(() =>
{
    var child1 = new Task(() => Thread.Sleep(100), TaskCreationOptions.AttachedToParent);
    var child2 = new Task(() => Thread.Sleep(200), TaskCreationOptions.AttachedToParent);
    child1.Start();
    child2.Start();
});
parent.Start();
parent.Wait(); // ✅ 这里会等 child1 + child2 都结束才返回

漏掉 AttachedToParentparent.Wait() 立刻返回,子任务可能还在后台跑——这是最常见的“以为等了其实没等” bug。

LongRunning 不是“性能优化开关”,而是资源隔离手段

别因为名字带 “Long” 就随便加。它的真实作用是:**防止长时间阻塞操作污染线程池**。

故事AI绘图神器
故事AI绘图神器

文本生成图文视频的AI工具,无需配音,无需剪辑,快速成片,角色固定。

下载
  • 适用场景:while(true) { ReadSensor(); Thread.Sleep(500); } 类监控循环、同步 I/O 等待、或任何 > 1 秒且无法异步化的操作
  • 反模式:用它包装一个 await HttpClient.GetAsync() —— 这是异步的,不该占专用线程
  • 副作用:每个 LongRunning 任务都新建线程,开多了会触发 ThreadAbortException 或内存压力

TaskFactory.CreationOptions 是“默认选项批发商”

如果你反复创建一堆行为一致的任务(比如全是 LongRunning + AttachedToParent),别每次都传参数,直接配工厂:

var factory = new TaskFactory(TaskCreationOptions.LongRunning | TaskCreationOptions.AttachedToParent);
var t = factory.StartNew(() => DoWork()); // 自动带上两个 flag

注意:TaskFactory.CreationOptions 是只读属性,你只能在构造时指定;它不会影响已存在的任务,也不会覆盖你显式传入的 creationOptions 参数(后者优先级更高)。

最容易被忽略的一点:所有这些选项,只有在任务**真正被调度执行时**才起作用——如果任务还没 Start() 或被 await 挂起,它们只是静静躺在对象里,毫无意义。

相关专题

更多
while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

90

2023.09.25

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

482

2023.08.10

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

61

2025.12.01

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

220

2023.12.07

PHP 高并发与性能优化
PHP 高并发与性能优化

本专题聚焦 PHP 在高并发场景下的性能优化与系统调优,内容涵盖 Nginx 与 PHP-FPM 优化、Opcode 缓存、Redis/Memcached 应用、异步任务队列、数据库优化、代码性能分析与瓶颈排查。通过实战案例(如高并发接口优化、缓存系统设计、秒杀活动实现),帮助学习者掌握 构建高性能PHP后端系统的核心能力。

99

2025.10.16

PHP 数据库操作与性能优化
PHP 数据库操作与性能优化

本专题聚焦于PHP在数据库开发中的核心应用,详细讲解PDO与MySQLi的使用方法、预处理语句、事务控制与安全防注入策略。同时深入分析SQL查询优化、索引设计、慢查询排查等性能提升手段。通过实战案例帮助开发者构建高效、安全、可扩展的PHP数据库应用系统。

84

2025.11.13

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号