讲师中心 微信公众号
AI工具推荐 视频效率加速

c# ParallelOptions 的 MaxDegreeOfParallelism 和 CancellationToken

千宇姑娘_7588

千宇姑娘_7588

发布时间:2026-01-18 12:17:02

|

301人浏览过

|

来源于php中文网

原创

设置 MaxDegreeOfParallelism = -1 会退回到默认行为,即按逻辑处理器数(通常为 Environment.ProcessorCount)动态调度;CancellationToken 仅阻止新任务启动,已运行任务需手动检查 token 才能响应取消。

c# paralleloptions 的 maxdegreeofparallelism 和 cancellationtoken

MaxDegreeOfParallelism 设置为 -1 会发生什么

它不会“不限制并发数”,而是退回到默认行为:.NET 运行时根据逻辑处理器数量动态决定线程数,通常是 Environment.ProcessorCount。设置 MaxDegreeOfParallelism = -1 等价于不设置该属性,不是“无上限”。真想压榨全部线程资源(比如 I/O 密集型场景),得明确设为一个足够大的正整数,但要注意这可能导致线程池饥饿。

CancellationToken 在 Parallel.ForEach 中如何真正生效

CancellationToken 不会自动中断正在执行的迭代项,只影响“是否启动新任务”。一旦某个 action 已开始运行,它必须自己检查 token.IsCancellationRequested 并主动退出。否则,即使调用 token.Cancel(),循环仍会等所有已派发的任务完成才返回。

Miller CSV TSV JSON 数据处理器
Miller CSV TSV JSON 数据处理器

Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。

下载
  • 在循环体内部定期检查 token.ThrowIfCancellationRequested() 或 if (token.IsCancellationRequested) return;
  • 避免在 long-running 同步操作(如 Thread.Sleep(5000))中忽略 token
  • 若使用 async 操作,Parallel.ForEach 本身不支持异步委托,需改用 Task.WhenAll + Partition 手动实现

ParallelOptions.MaxDegreeOfParallelism 和 CancellationToken 能一起用吗

能,而且推荐一起用——尤其在可控资源消耗 + 可中断的批处理场景中。但要注意两者作用域不同:MaxDegreeOfParallelism 控制并行“宽度”,CancellationToken 控制整体“生命周期”。它们互不干扰,但共同影响最终行为:

  • 设置 MaxDegreeOfParallelism = 4 后,最多同时跑 4 个迭代;此时调用 token.Cancel(),已运行的 4 个可能继续,但第 5 个起不再调度
  • 若某次迭代中抛出未捕获异常,Parallel.ForEach 默认立即停止调度新任务,并等待正在运行的完成(类似隐式 cancellation),但不会触发 CancellationToken 的回调
  • 不要依赖 CancellationToken 来“限流”,它不控制并发度;也不要靠 MaxDegreeOfParallelism 实现取消逻辑
var options = new ParallelOptions
{
    MaxDegreeOfParallelism = 3,
    CancellationToken = cts.Token
};

try
{
    Parallel.ForEach(items, options, item =>
    {
        // 必须手动检查
        cts.Token.ThrowIfCancellationRequested();

        // 模拟工作
        Thread.Sleep(100);

        // 若此处耗时且不可中断,Cancel() 就形同虚设
    });
}
catch (OperationCanceledException)
{
    // 只有在 ThrowIfCancellationRequested 触发时才会进这里
    Console.WriteLine("被取消了");
}
并发控制和取消信号是两个正交维度,混用时最容易漏掉的是“任务体内没查 token”——看起来设置了 CancellationToken,实际根本没响应。

热门AI工具

更多
Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

698

2025.12.04

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

12466

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

1505

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

3337

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

5501

2024.03.01

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

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

3698

2023.08.10

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

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

523

2025.12.01

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

0

2026.09.30

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

0

2026.09.30

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
夸克AI浏览器使用手册
夸克AI浏览器使用手册

共0课时 | 0人学习

jQuery官方API文档
jQuery官方API文档

共0课时 | 0人学习

Manus AI 入门手册
Manus AI 入门手册

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn