协作式取消paralle.for

2024-05-08 10:48
文章标签 协作 取消 paralle

本文主要是介绍协作式取消paralle.for,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

协作式取消只能取消一次,如果想实现类似于开关的联动式协作,还得依赖于开关量,此时可以使用原子锁实现。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApp53
{class Program{static void Main(string[] args){var cts = new CancellationTokenSource();var tf = new TaskFactory(cts.Token);tf.StartNew(() => DoSomething1(cts.Token));tf.StartNew(() => DoSomething2(cts.Token));Console.ReadKey();cts.Cancel();Console.WriteLine(DoSomething3());Console.ReadKey();}static async Task DoSomething3(){while (true){Console.WriteLine("Done;");await Task.Delay(1000);}}static void DoSomething1(CancellationToken token){Console.WriteLine("hello do something1");ParallelOptions ops = new ParallelOptions();ops.CancellationToken = token;try{Parallel.For(0, 100000, ops, (n) =>{ops.CancellationToken.ThrowIfCancellationRequested();Console.WriteLine(n);Task.Delay(1000);});}catch (OperationCanceledException){Console.ForegroundColor = ConsoleColor.Red;Console.WriteLine("DoSomething1 Canceled");}}static void DoSomething2(CancellationToken token){Console.WriteLine("hello do something2");ParallelOptions ops = new ParallelOptions();ops.CancellationToken = token;try{Parallel.For(0, 100000, (n) =>{ops.CancellationToken.ThrowIfCancellationRequested();Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));Task.Delay(1000);});}catch (OperationCanceledException){Console.ForegroundColor = ConsoleColor.Red;Console.WriteLine("DoSomething2 Canceled");}}}
}

这篇关于协作式取消paralle.for的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/970101

相关文章

springboot+redis实现订单过期(超时取消)功能的方法详解

《springboot+redis实现订单过期(超时取消)功能的方法详解》在SpringBoot中使用Redis实现订单过期(超时取消)功能,有多种成熟方案,本文为大家整理了几个详细方法,文中的示例代... 目录一、Redis键过期回调方案(推荐)1. 配置Redis监听器2. 监听键过期事件3. Redi

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

远程桌面文件传输异常或者取消传输后一直显示正在取消

环境: Window Servers 2008 R2 摘要说明: 本篇文章主要讲述当应用远程桌面进行文件传输时,若因网络等导致进程中断,再次传输时则不能进行文件传输;或者传输时取消传输,然后一直显示正在取消。此时可以通过重启window的rdpclip.exe进程来解决此问题 步骤 1.关闭rdpclip.exe进程 远程桌面连上上传输异常的服务器,打开资源管理器,在进程列关闭rdpc

【Java编程思想】线程的基本协作机制 与 线程的中断

wait/notify Java在Object类中定义了一些线程协作的基本方法,wait和notify public final void wait() throws InterruptedException;public final native void wait(long timeout) throws InterruptedException; 一个带时间参数,单位是毫秒,表示最

【python requests警告】python3.x requests库取消ssl验证,InsecureRequestWarning: Unverified HTTPS request is be

警告信息: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warni

掌握Git分支管理策略:让团队协作更高效

在现代软件开发过程中,版本控制系统(VCS)是不可或缺的一部分。Git作为目前最流行的分布式版本控制系统之一,为开发者提供了强大的工具集来管理代码变更历史。然而,仅仅掌握Git的基本命令并不足以应对大型项目和团队协作的需求。有效的分支管理策略对于保持代码库的整洁、促进团队间的高效协作至关重要。本文将探讨几种常用的Git分支管理模型,并提供一些建议来帮助你的团队选择最适合的策略。 常见的分支管