![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
使用 C# 10 和 .NET 6 进行并行编程和并发
文章平均质量分 95
使用 C# 10 和 .NET 6 进行并行编程和并发
0neKing2017
这个作者很懒,什么都没留下…
展开
-
12.异步单元测试, 并发和并行代码
单元测试异步代码需要与编写良好的异步 C# 代码相同的方法。如果您需要复习如何使用异步方法,可以查看第 5 章。在为异步方法编写单元测试时,您将使用await关键字等待该方法完成。这要求您的单元测试方法是异步的并返回任务。就像其他 C# 代码一样,不允许创建async void方法。这可能看起来像您为同步代码编写的大多数测试。只有几个区别:• 首先,测试方法是异步的并返回Task。• 其次,对的调用使用await关键字来等待结果。原创 2024-07-20 08:48:35 · 737 阅读 · 0 评论 -
11.取消异步工作
取消 .NET 中的异步工作基于取消令牌的使用。令牌是一个简单的对象,用于指示已向另一个线程发出取消请求。对象管理这些请求并包含一个令牌。如果要使用同一触发器取消多个操作,则应向所有要取消的线程提供相同的令牌。实例具有Token属性,用于访问属性并将其传递给一个或多个异步操作。取消请求只能从对象发出。提供给其他操作的属性接收取消信号,但无法启动取消。实现接口,因此在释放托管资源时请务必调用Dispose。如果对您的工作流程实用,则最好使用using语句或块来自动处理令牌源。原创 2024-07-20 08:46:20 · 615 阅读 · 0 评论 -
10.使用 Visual Studio 调试多线程应用程序
调试是每个 .NET 开发人员技能的关键组成部分。没有人会编写没有错误的代码,将多线程结构引入到您的项目中只会增加引入的机会错误。由于 .NET 和 C# 添加了更多对并行编程和并发的支持,Visual Studio 添加了更多调试功能来支持这些构造。在前面的章节中,我们将使用这些调试工具单步调试本书前面一些章节中的项目中的多线程代码。让我们首先了解“线程”和“附加到进程”窗口以及“调试位置”工具栏。原创 2024-07-20 08:44:11 · 596 阅读 · 0 评论 -
9.在 .NET 中使用并发集合
在本章中,我们深入研究了命名空间中的五个集合。我们在本章中创建了五个示例应用程序,以获得 .NET 6 中可用的每种并发集合类型的一些实践经验。通过混合使用 WPF、WinForms 和 .NET 控制台应用程序项目,我们研究了在自己的应用程序中利用这些集合的一些实际方法。原创 2024-07-20 08:39:38 · 707 阅读 · 0 评论 -
8.并行数据结构和并行 LINQ
PLINQ 是 LINQ 的一组 .NET 扩展,允许通过利用线程池并行执行部分 LINQ 查询。PLINQ 实现提供所有可用 LINQ 查询操作的并行版本。与 LINQ 查询一样,PLINQ 查询提供延迟执行。这意味着在需要枚举对象之前不会对其进行查询。如果您不熟悉 LINQ 的延迟执行,我们将通过一个简单的示例来说明该概念。在示例中,由于调用了ToList(),因此会立即执行填充carsWithS的LINQ查询。填充cityWithT的第二个查询不会立即执行。执行会推迟到需要值时为止。直到我们在。原创 2024-07-20 08:37:08 · 886 阅读 · 0 评论 -
7.任务并行库(TPL)和数据
TPL Dataflow 库的历史与 TPL 本身一样长。它于 2010 年 .NET Framework 4.0 达到其 RTM 里程碑后发布。数据流库的成员是命名空间。数据流库旨在构建 TPL 中提供的并行编程基础知识,并进行扩展以解决数据流场景(该库的名称由此而来)。数据流库由称为块的基础类组成。每个数据流块负责整个流中的特定操作或步骤。数据流库由三种基本类型的块组成:源块(Source blocks):这些块实现接口。源块可以从您定义的工作流程中读取数据。原创 2024-07-20 08:35:12 · 637 阅读 · 0 评论 -
6.并行编程概念
在本章中,我们学习了如何在 .NET 应用程序中利用并行编程概念。我们亲身体验了和循环。在这些部分中,我们学习了如何安全地聚合数据,同时保持线程安全。接下来,我们学习了如何管理父任务与其并行子任务之间的关系。这将有助于确保您的应用程序保持预期的操作顺序。最后,我们介绍了在应用程序中实现并行性时要避免的一些重要陷阱。开发人员需要密切注意,以避免在自己的应用程序中出现任何这些陷阱。原创 2024-07-20 08:32:42 · 612 阅读 · 0 评论 -
5.使用 C# 进行异步编程
在本章中,我们涵盖了有关使用 C# 进行异步开发的大量信息。网。我们首先介绍了处理应用程序中 I/O 密集型和 CPU 密集型操作的一些方法。接下来,我们创建了一些使用 Task 和 Task 类的实际示例,并发现了如何使用多个 Task 对象。您获得了一些有关现代异步代码和旧同步方法之间互操作的实用建议。最后,我们介绍了使用异步代码和任务对象时需要记住的一些最重要的规则。原创 2024-07-20 08:28:43 · 757 阅读 · 0 评论 -
4.用户界面响应能力和线程
在第一章中,我们学习了如何创建后台线程并讨论了它们的一些用途。后台线程的优先级低于进程的主线程和其他线程池线程。此外,活动的后台线程不会阻止用户或系统终止应用程序。这意味着后台线程非常适合执行以下任务:• 写入日志和分析数据• 监控网络或文件系统资源• 将数据读入应用程序不要将后台线程用于关键应用程序操作,如下所示:• 保存应用程序状态• 执行数据库事务• 应用程序数据处理。原创 2024-07-19 17:59:57 · 647 阅读 · 0 评论 -
3.托管线程的最佳实践
在 .NET 中处理静态数据时,涉及托管线程时需要了解一些重要的事情。原创 2024-07-19 17:58:09 · 353 阅读 · 0 评论 -
2.NET 中多线程编程的演变
在探索 C# 和 .NET 中线程的历史时,我们了解到 .NET Framework 4.0 中向开发人员引入了并行性。在本节中,将通过类在 TPL 中公开要探讨的方面。此外,我们将通过示例介绍 PLINQ 的一些基础知识。第 6 章、第 7 章和第 8 章将通过实际示例更详细地介绍这些数据并行性概念。从高层次来看,并行性是并行执行多个任务的概念。这些任务可以彼此相关,但这不是必需的。事实上,并行运行的相关任务遇到同步问题或相互阻塞的风险更大。原创 2024-07-19 17:57:00 · 798 阅读 · 0 评论 -
1.托管线程概念
在 .NET 中,托管线程是由我们在前面的示例中使用的类实现的。当前进程的托管执行环境监视作为进程一部分运行的所有线程。非托管线程是使用本机 Win32 线程元素在 C++ 中进行编程时管理线程的方式。非托管线程可以通过COM互操作或通过 .NET 代码的平台调用 (PInvoke) 调用进入托管进程。如果该线程是第一次进入托管环境,.NET 将创建一个新的Thread对象来由执行环境管理。可以使用Thread对象的属性来唯一标识托管线程。原创 2024-07-19 17:54:58 · 555 阅读 · 0 评论