《C#多线程编程实战(原书第2版)》——3.5 实现一个取消选项

本节书摘来自华章出版社《C#多线程编程实战(原书第2版)》一书中的第3章,第3.5节,作者(美)易格恩·阿格佛温(Eugene Agafonov),黄博文 黄辉兰 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.5 实现一个取消选项

本节将通过一个示例来展示如何在线程池中取消异步操作。

3.5.1 准备工作

为了学习本节,你需要安装Visual Studio 2015。除此之外无需其他准备。本节的源代码放置在BookSamplesChapter3Recipe4目录中。

3.5.2 实现方式

请执行以下步骤来了解如何在线程中实现一个取消选项:

1.启动Visual Studio 2015。新建一个C#控制台应用程序项目。

2.在Program.cs文件中加入以下using指令:


《C#多线程编程实战(原书第2版)》——3.5 实现一个取消选项

3.在Main方法下面加入以下代码片段:


《C#多线程编程实战(原书第2版)》——3.5 实现一个取消选项


《C#多线程编程实战(原书第2版)》——3.5 实现一个取消选项

4.在Main方法中加入以下代码片段:


《C#多线程编程实战(原书第2版)》——3.5 实现一个取消选项


《C#多线程编程实战(原书第2版)》——3.5 实现一个取消选项

5.运行程序。

3.5.3 工作原理

本节中介绍了CancellationTokenSource和CancellationToken两个新类。它们在.NET4.0被引入,目前是实现异步操作的取消操作的事实标准。由于线程池已经存在了很长时间,并没有特殊的API来实现取消标记功能,但是仍然可以对线程池使用上述API。

在本程序中使用了三种方式来实现取消过程。第一个是轮询来检查CancellationToken.IsCancellationRequested属性。如果该属性为true,则说明操作需要被取消,我们必须放弃该操作。

第二种方式是抛出一个OperationCancelledException异常。这允许在操作之外控制取消过程,即需要取消操作时,通过操作之外的代码来处理。

最后一种方式是注册一个回调函数。当操作被取消时,在线程池将调用该回调函数。这允许链式传递一个取消逻辑到另一个异步操作中。

上一篇:双边滤波器的原理及实现


下一篇:微软97%漏洞与管理员权限有关 否则比 Linux 安全