编辑
2025-09-24
C#
00

摘要


在 C# 中,CancellationTokenSource 是一个用于创建和管理 CancellationToken(取消标记)的类。它提供了一种简单的方式来请求取消异步或多线程操作。

正文


看一下Cancel的顺序

C#
static void Main(string[] args) { CancellationTokenSource cts = new CancellationTokenSource(); CancellationToken cancellationToken = cts.Token; cancellationToken.Register(() => { Console.WriteLine("Cancel1..."); }); cancellationToken.Register(() => { Console.WriteLine("Cancel2..."); }); cancellationToken.Register(state => { Console.WriteLine("Cancel3..." + state.ToString()); }, "OK"); Console.WriteLine("开始..."); cts.Cancel(); }
编辑
2025-09-24
C#
00

摘要

在C#中,可以使用Factory.StartNew()方法来调用一个对象的实例。Factory.StartNew()方法的用法很简单,它接受一个参数,即需要创建的对象类型,并返回一个实例。 除了直接使用Factory.StartNew()方法创建对象之外,还可以通过继承或重写抽象类或接口的方法来创建对象。这样,当需要创建一个特定类型的对象时,可以使用Factory.StartNew()方法调用对应的抽象类或接口,并在方法中指定对象的属性和方法。

编辑
2025-09-24
C#
00

摘要

.NET 提供了一个类方便用来发出操作取消的信号,这个类就是CancellationToken,它的好处在于它可以在任意数量的线程之间、线程池任务之间、Task之间传递信号,并且所需的代码很简单。通常用于下载超时中断、用户取消任务等情况。

CancellationToken 通常搭配 CancellationTokenSource 使用,后者是前者的一个管理类,使用 CancellationTokenSource 的 Token 属性,可以获取CancellationToken,并控制信号的发送。这两个类都属于命名空间 System.Threading

在异步编程中,只需将 Token 作为一个参数传入异步方法中。在异步方法外便能通过 CancellationTokenSource.Cancel 方法发出取消信号或者 CancelAfter 方法在一段时间后发出取消信号,这会改变 Token 的 isCancellationRequested 属性。在异步方法内,通过这个属性获取取消信号,并作出对应的处理操作。

正文

一个例子

image.png

编辑
2025-09-24
C#
00

摘要

C# 是一种广泛使用的面向对象编程语言,具有许多优秀的特性,例如面向对象编程、类型安全和强类型检查等。在 C# 中,可以使用并行和串行方式来处理任务,以提高程序的性能和效率。本文将介绍如何使用 C# 编写一个例子来实现任务的串行和并行。

正文

一个例子

等待任务的方法包括等待它们执行完成,可以通过调用它们的 Wait 方法,或者查看它们的 Result 属性。另外,我们也可以调用 Task.WaitAll 等待所有任务执行完成,或者调用 Task.WaitAny 等待任意一个任务执行完成。

编辑
2025-09-24
C#
00

摘要

在C#中,处理线程等待和延续的任务可以通过Task类来实现。Task类是.NET 中的一部分,提供了一种简单而强大的方式来处理异步操作。

  • Wait:针对单个Task的实例,可以task1.wait进行线程等待
  • WaitAny:线程列表中任何一个线程执行完毕即可执行(阻塞主线程)
  • WaitAll:线程列表中所有线程执行完毕方可执行(阻塞主线程)
  • WhenAny:与ContinueWith配合,线程列表中任何一个执行完毕,则继续ContinueWith中的任务(开启新线程,不阻塞主线程)
  • WhenAll:与ContinueWith配合,线程列表中所有线程执行完毕,则继续ContinueWith中的任务(开启新线程,不阻塞主线程)
  • ContinueWith:与WhenAny或WhenAll配合使用
  • ContinueWhenAny:等价于Task的WhenAny+ContinueWith
  • ContinueWhenAll:等价于Task的WhenAll+ContinueWith