摘要:
单元测试异步代码 单元测试异步代码需要与编写良好的异步 C# 代码相同的方法。如果您需要复习如何使用异步方法,可以查看第 5 章。 在为异步方法编写单元测试时,您将使用await 关键字等待该方法完成。 这要求您的单元测试方法是异步的并返回任务。 就像其他 C# 代码一样,不允许创建 async v 阅读全文
摘要:
取消托管线程 取消 .NET 中的异步工作基于取消令牌的使用。 令牌是一个简单的对象,用于指示已向另一个线程发出取消请求。 CancellationTokenSource 对象管理这些请求并包含一个令牌。 如果要使用同一触发器取消多个操作,则应向所有要取消的线程提供相同的令牌。 Cancellati 阅读全文
摘要:
引入多线程调试 调试是每个 .NET 开发人员技能的关键组成部分。 没有人会编写没有错误的代码,将多线程结构引入到您的项目中只会增加引入的机会 错误。 由于 .NET 和 C# 添加了更多对并行编程和并发的支持,Visual Studio 添加了更多调试功能来支持这些构造。 如今,Visual St 阅读全文
摘要:
BlockingCollection BlockingCollection<T> 是最有用的并发集合之一。 正如我们在第 7 章中看到的,BlockingCollection<T> 被创建为 .NET 生产者/消费者模式的实现。 在创建不同类型的示例项目之前,让我们回顾一下该集合的一些细节。 Blo 阅读全文
摘要:
PLINQ 简介 PLINQ 是 LINQ 的一组 .NET 扩展,允许通过利用线程池并行执行部分 LINQ 查询。 PLINQ 实现提供所有可用 LINQ 查询操作的并行版本。 与 LINQ 查询一样,PLINQ 查询提供延迟执行。 这意味着在需要枚举对象之前不会对其进行查询。 如果您不熟悉 LI 阅读全文
摘要:
介绍 TPL 数据流库 TPL Dataflow 库的历史与 TPL 本身一样长。 它于 2010 年 .NET Framework 4.0 达到其 RTM 里程碑后发布。 数据流库的成员是 System.Threading.Tasks.Dataflow 命名空间。 数据流库旨在构建 TPL 中提供 阅读全文
摘要:
TPL 入门 TPL 由添加到 .NET Framework 4.0 中的 System.Threading 和 System.Threading.Tasks 命名空间的类型组成。 TPL 提供的功能使 .NET 开发人员的并行性和并发性变得更简单。 无需在代码中管理 ThreadPool 任务。 阅读全文