随笔分类 - C#/.NET
摘要:单元测试异步代码 单元测试异步代码需要与编写良好的异步 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 任务。
阅读全文
摘要:有关 .NET 中的异步编程的更多信息 通常引入异步代码的场景有两种: • I/O 密集型操作:这些操作涉及从网络或磁盘获取的资源。 • CPU 密集型操作:这些是内存中的 CPU 密集型操作。 在本节中,我们将创建一些针对每种类型的操作使用 async 和 wait 的实际示例。 无论您是等待外部
阅读全文
摘要:利用后台线程 在第一章中,我们学习了如何创建后台线程并讨论了它们的一些用途。 后台线程的优先级低于进程的主线程和其他线程池线程。此外,活动的后台线程不会阻止用户或系统终止应用程序。 这意味着后台线程非常适合执行以下任务: • 写入日志和分析数据 • 监控网络或文件系统资源 • 将数据读入应用程序 不
阅读全文
摘要:处理静态对象 在 .NET 中处理静态数据时,涉及托管线程时需要了解一些重要的事情。 静态数据和构造函数 关于从托管线程访问静态数据需要了解的一项重要内容与构造函数有关。 在访问任何类的静态成员之前,必须先完成其静态构造函数的运行。 运行时将阻止线程执行,直到静态构造函数运行为止,以确保所有必需的初
阅读全文
摘要:.NET 线程多年来 自 2002 年推出 .NET Framework 1.0 和 C# 1.0 以来,在 .NET 和 C# 中使用线程已经发生了很大的变化。第 1 章中讨论的有关 System.Threading.Thread 对象的大多数概念自 .NET 早期就已经存在。 虽然 Thread
阅读全文
摘要:.NET 线程基础知识 是时候开始学习 C# 和 .NET 中的线程基础知识了。 我们将介绍 .NET 6 中可用的托管线程概念,但其中许多功能从一开始就是 .NET 的一部分。System.Threading 命名空间从 .NET Framework 1.0 开始可用。 在随后的 20 年中,为开
阅读全文
摘要:像ASP.NET Core这样的网络框架的一个卖点是能够提供一个动态的应用程序,为个人用户定制。许多应用程序都有一个服务 "账户 "的概念,你可以 "登录 "这个账户,获得不同的体验。 根据不同的服务,账户给你带来不同的东西:在一些应用程序上,你可能必须登录以获得额外的功能,而在其他应用程序上,你可
阅读全文
摘要:了解过滤器以及何时使用它们 在本节中,您将了解有关过滤器管道的所有信息。 您将看到它在典型请求的生命周期中的位置、MVC 和 Razor 页面之间的区别以及过滤器与中间件的区别。 您将了解六种类型的过滤器,如何将它们添加到您自己的应用程序中,以及如何控制它们在处理请求时的执行顺序。 过滤器管道是一个
阅读全文
摘要:介绍Entity Framework Core 数据库访问代码在 Web 应用程序中无处不在。 无论您是构建电子商务应用程序、博客还是 Next Big Thing™,您都可能需要与数据库进行交互。 不幸的是,从应用程序代码与数据库交互通常是一件麻烦事,您可以采用许多不同的方法。 例如,从数据库读取
阅读全文
摘要:使用 HttpClient 类 首先创建一个新的 Blazor WASM 项目(启用托管),就像您在第一章中创建的一样(称为 Blazor.Communication)。 您将使用此项目来检查为您创建的模板。 您将从查看解决方案的服务器端开始,然后是共享项目的代码,然后是客户端。 检查服务器项目 查
阅读全文
摘要:从 C# 调用 JavaScript 浏览器具有许多您可能希望在 Blazor 网站中使用的功能。 例如,您可能希望使用浏览器的本地存储来跟踪某些数据。由于 Blazor 的 JavaScript 互操作性,这很容易。 提供胶水功能 要调用 JavaScript 功能,首先要在 JavaScript
阅读全文
摘要:单页应用程序 SPA 是一种 Web 应用程序,它可以替换 UI 的某些部分,而无需重新加载整个页面。 SPA 使用 JavaScript 来实现对浏览器控制树的这种操作,也称为文档对象模型 (DOM),其中大多数由固定的 UI 和占位符元素组成,其中内容根据用户单击的位置被覆盖。 使用 SPA 的
阅读全文
摘要:单元测试 Blazor 组件 让我们为 Blazor 应用程序创建几个测试。 在本章的代码下载中,您可以找到测试解决方案。 用你最喜欢的编辑器打开它。 项目中的所有内容都应该看起来很熟悉。 有 Counter 组件和 FetchData 组件,它们使用 IWeatherService 从服务器检索天
阅读全文
摘要:了解 HTTP 在谈论 REST 之前,您应该对超文本传输协议(也称为 HTTP)有一个很好的了解。 HTTP 由 CERN 的 Tim Berners-Lee 于 1989 年创建。CERN 是基础物理研究中心,研究人员完成研究后会做什么? 他们用他们的研究成果发表论文。 在互联网出现之前,发表论
阅读全文
