May 2025
Intermediate to advanced
1086 pages
14h 54m
Chinese
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
大多数应用程序都需要同时处理多件事情(并发)。在本章中,我们将首先介绍基本的先决条件,即线程和任务的基础知识,然后详细介绍异步的原理和 C# 的异步函数。
在第 21 章中,我们将更详细地重温多线程,在第 22 章中,我们将介绍并行编程的相关主题。
以下是最常见的并发情况:
程序同时执行代码的一般机制称为多线程。多线程由 CLR 和操作系统支持,是并发的基本概念。因此,了解线程的基本原理,尤其是线程对共享状态的影响,是至关重要的。
线程是一条执行路径,可以独立于其他线程执行。
每个线程都在操作系统进程中运行,该进程为程序的运行提供了一个隔离环境。对于单线程程序,只有一个线程在进程的隔离环境中运行,因此该线程可以独占该环境。多线程程序则是多个线程在一个进程中运行,共享相同的执行环境(尤其是内存)。这就是多线程有用的部分原因:例如,一个线程可以在后台获取数据,而另一个线程可以在数据到达时显示数据。这些数据被称为共享状态。
客户端程序(控制台、WPF、UWP 或 Windows 窗体)在操作系统自动创建的单线程("主 "线程)中启动。在这里,它作为一个单线程应用程序运行,除非你另辟蹊径,直接或间接创建更多线程。1
你可以通过实例化Thread 对象并调用其Start 方法来创建并启动一个新线程。 Thread 最简单的构造函数需要一个ThreadStart 委托:这是一个无参数方法,指示执行应从何处开始。下面是一个示例:
// NB: All samples in this chapter assume the following namespace imports:
using System;
using System.Threading; Thread t = new Thread (WriteY); // Kick off a new thread t.Start(); // running WriteY() // Simultaneously, do something on the main thread. for (int i = 0; i < 1000; i++) Console.Write ("x"); void WriteY() { for (int i = 0; i < 1000; i++) Console.Write ...Read now
Unlock full access