返回题库高级 .NET 刷题.NET 异步与并发选择题 · 第 2 / 6 篇

.NET 异步并发试题 02:SynchronizationContext 与 TaskScheduler

021 关于SynchronizationContext,哪一项准确描述了应依赖的平台契约?

难度: 基础

  • A. 每个 await 都必然捕获一个非空 SynchronizationContext
  • B. 控制台和 ASP.NET Core 通常没有传统 UI 上下文,不能照搬死锁结论
  • C. 只要观察到“相同代码在桌面程序和服务中行为不同”,就能把这次现象视为所有环境中的固定行为。
  • D. SynchronizationContext 为环境提供发布回调的抽象,UI 等宿主可用它维持线程亲和性
查看答案与解析

正确答案D

正确项给出了SynchronizationContext可直接依赖的规则:“SynchronizationContext 为环境提供发布回调的抽象,UI 等宿主可用它维持线程亲和性”。“控制台和 ASP.NET Core 通常没有传统 UI 上下文,不能照搬死锁结论”是应用规则前必须确认的边界,不是规则本身;“每个 await 都必然捕获一个非空 SynchronizationContext”则把常见现象或实现细节扩大成了平台保证。场景“相同代码在桌面程序和服务中行为不同”只能作为排查线索,仍需结合目标框架、发布方式和运行时证据验证。

022 生产环境出现“相同代码在桌面程序和服务中行为不同”时,针对SynchronizationContext应如何排查?

难度: 进阶

  • A. 直接采用“每个 await 都必然捕获一个非空 SynchronizationContext”解释现象,不再收集目标进程和发布配置证据。
  • B. 先验证“控制台和 ASP.NET Core 通常没有传统 UI 上下文,不能照搬死锁结论”,再使用运行时指标、日志或最小复现检查“SynchronizationContext 为环境提供发布回调的抽象,UI 等宿主可用它维持线程亲和性”是否成立。
  • C. 只增加机器资源或重启进程,以一次恢复结果代替对“控制台和 ASP.NET Core 通常没有传统 UI 上下文,不能照搬死锁结论”的验证。
  • D. 只检查代码是否能够编译,通过后便认定“SynchronizationContext 为环境提供发布回调的抽象,UI 等宿主可用它维持线程亲和性”在当前部署中必然成立。
查看答案与解析

正确答案B

“相同代码在桌面程序和服务中行为不同”可能由多条路径造成,不能直接证明根因。合理顺序是先确认边界“控制台和 ASP.NET Core 通常没有传统 UI 上下文,不能照搬死锁结论”,再以“SynchronizationContext 为环境提供发布回调的抽象,UI 等宿主可用它维持线程亲和性”组织证据。采用误区“每个 await 都必然捕获一个非空 SynchronizationContext”、盲目扩容或只看编译结果,都跳过了运行配置与真实调用路径,无法形成可复核的诊断结论。

023 评审SynchronizationContext相关实现时,以下哪项判断不成立?

难度: 实战

  • A. 每个 await 都必然捕获一个非空 SynchronizationContext
  • B. SynchronizationContext 为环境提供发布回调的抽象,UI 等宿主可用它维持线程亲和性
  • C. 控制台和 ASP.NET Core 通常没有传统 UI 上下文,不能照搬死锁结论
  • D. 遇到“相同代码在桌面程序和服务中行为不同”时,应把可观察证据与平台契约分开记录,再验证二者是否一致。
查看答案与解析

正确答案A

题目要求找出不成立的判断,“每个 await 都必然捕获一个非空 SynchronizationContext”正是SynchronizationContext的典型误区。主规则“SynchronizationContext 为环境提供发布回调的抽象,UI 等宿主可用它维持线程亲和性”描述了实现应依赖的契约,边界“控制台和 ASP.NET Core 通常没有传统 UI 上下文,不能照搬死锁结论”限制了结论的适用范围。生产场景还需要保留指标、日志、跟踪或转储等证据,不能因为一次成功或失败就反转稳定契约。

024 准备上线涉及SynchronizationContext的改动时,哪项验收方案最完整?

难度: 实战

  • A. 依据“每个 await 都必然捕获一个非空 SynchronizationContext”完成修改,只要本地运行一次成功就立即发布。
  • B. 按照“SynchronizationContext 为环境提供发布回调的抽象,UI 等宿主可用它维持线程亲和性”修改代码,但不核对“控制台和 ASP.NET Core 通常没有传统 UI 上下文,不能照搬死锁结论”或目标发布模式。
  • C. 依据“SynchronizationContext 为环境提供发布回调的抽象,UI 等宿主可用它维持线程亲和性”实现,在“控制台和 ASP.NET Core 通常没有传统 UI 上下文,不能照搬死锁结论”成立的环境中验证,并为“相同代码在桌面程序和服务中行为不同”保留可观测证据和回退条件。
  • D. 只验证“控制台和 ASP.NET Core 通常没有传统 UI 上下文,不能照搬死锁结论”,实现仍继续依赖“每个 await 都必然捕获一个非空 SynchronizationContext”这一未经证明的假设。
查看答案与解析

正确答案C

完整验收必须同时覆盖规则、边界和生产证据:实现遵守“SynchronizationContext 为环境提供发布回调的抽象,UI 等宿主可用它维持线程亲和性”,部署环境满足“控制台和 ASP.NET Core 通常没有传统 UI 上下文,不能照搬死锁结论”,并能在“相同代码在桌面程序和服务中行为不同”出现时定位和回退。其余方案分别依赖错误假设、遗漏环境验证或只检查边界却保留错误实现,均不能证明改动在生产环境中安全。

025 关于await 上下文捕获,哪一项准确描述了应依赖的平台契约?

难度: 基础

  • A. await 默认会根据当前 awaiter 和环境安排延续,库代码可按契约选择 ConfigureAwait
  • B. 调用一次 ConfigureAwait(false) 后后续所有代码永不切线程
  • C. ConfigureAwait(false) 只影响该等待点,不能清除整个调用链的线程需求
  • D. 只要观察到“库方法被 UI 调用时延续位置不一致”,就能把这次现象视为所有环境中的固定行为。
查看答案与解析

正确答案A

正确项给出了await 上下文捕获可直接依赖的规则:“await 默认会根据当前 awaiter 和环境安排延续,库代码可按契约选择 ConfigureAwait”。“ConfigureAwait(false) 只影响该等待点,不能清除整个调用链的线程需求”是应用规则前必须确认的边界,不是规则本身;“调用一次 ConfigureAwait(false) 后后续所有代码永不切线程”则把常见现象或实现细节扩大成了平台保证。场景“库方法被 UI 调用时延续位置不一致”只能作为排查线索,仍需结合目标框架、发布方式和运行时证据验证。

026 生产环境出现“库方法被 UI 调用时延续位置不一致”时,针对await 上下文捕获应如何排查?

难度: 进阶

  • A. 直接采用“调用一次 ConfigureAwait(false) 后后续所有代码永不切线程”解释现象,不再收集目标进程和发布配置证据。
  • B. 只增加机器资源或重启进程,以一次恢复结果代替对“ConfigureAwait(false) 只影响该等待点,不能清除整个调用链的线程需求”的验证。
  • C. 先验证“ConfigureAwait(false) 只影响该等待点,不能清除整个调用链的线程需求”,再使用运行时指标、日志或最小复现检查“await 默认会根据当前 awaiter 和环境安排延续,库代码可按契约选择 ConfigureAwait”是否成立。
  • D. 只检查代码是否能够编译,通过后便认定“await 默认会根据当前 awaiter 和环境安排延续,库代码可按契约选择 ConfigureAwait”在当前部署中必然成立。
查看答案与解析

正确答案C

“库方法被 UI 调用时延续位置不一致”可能由多条路径造成,不能直接证明根因。合理顺序是先确认边界“ConfigureAwait(false) 只影响该等待点,不能清除整个调用链的线程需求”,再以“await 默认会根据当前 awaiter 和环境安排延续,库代码可按契约选择 ConfigureAwait”组织证据。采用误区“调用一次 ConfigureAwait(false) 后后续所有代码永不切线程”、盲目扩容或只看编译结果,都跳过了运行配置与真实调用路径,无法形成可复核的诊断结论。

027 评审await 上下文捕获相关实现时,以下哪项判断不成立?

难度: 实战

  • A. await 默认会根据当前 awaiter 和环境安排延续,库代码可按契约选择 ConfigureAwait
  • B. ConfigureAwait(false) 只影响该等待点,不能清除整个调用链的线程需求
  • C. 遇到“库方法被 UI 调用时延续位置不一致”时,应把可观察证据与平台契约分开记录,再验证二者是否一致。
  • D. 调用一次 ConfigureAwait(false) 后后续所有代码永不切线程
查看答案与解析

正确答案D

题目要求找出不成立的判断,“调用一次 ConfigureAwait(false) 后后续所有代码永不切线程”正是await 上下文捕获的典型误区。主规则“await 默认会根据当前 awaiter 和环境安排延续,库代码可按契约选择 ConfigureAwait”描述了实现应依赖的契约,边界“ConfigureAwait(false) 只影响该等待点,不能清除整个调用链的线程需求”限制了结论的适用范围。生产场景还需要保留指标、日志、跟踪或转储等证据,不能因为一次成功或失败就反转稳定契约。

028 准备上线涉及await 上下文捕获的改动时,哪项验收方案最完整?

难度: 实战

  • A. 依据“调用一次 ConfigureAwait(false) 后后续所有代码永不切线程”完成修改,只要本地运行一次成功就立即发布。
  • B. 依据“await 默认会根据当前 awaiter 和环境安排延续,库代码可按契约选择 ConfigureAwait”实现,在“ConfigureAwait(false) 只影响该等待点,不能清除整个调用链的线程需求”成立的环境中验证,并为“库方法被 UI 调用时延续位置不一致”保留可观测证据和回退条件。
  • C. 按照“await 默认会根据当前 awaiter 和环境安排延续,库代码可按契约选择 ConfigureAwait”修改代码,但不核对“ConfigureAwait(false) 只影响该等待点,不能清除整个调用链的线程需求”或目标发布模式。
  • D. 只验证“ConfigureAwait(false) 只影响该等待点,不能清除整个调用链的线程需求”,实现仍继续依赖“调用一次 ConfigureAwait(false) 后后续所有代码永不切线程”这一未经证明的假设。
查看答案与解析

正确答案B

完整验收必须同时覆盖规则、边界和生产证据:实现遵守“await 默认会根据当前 awaiter 和环境安排延续,库代码可按契约选择 ConfigureAwait”,部署环境满足“ConfigureAwait(false) 只影响该等待点,不能清除整个调用链的线程需求”,并能在“库方法被 UI 调用时延续位置不一致”出现时定位和回退。其余方案分别依赖错误假设、遗漏环境验证或只检查边界却保留错误实现,均不能证明改动在生产环境中安全。

029 关于TaskScheduler,哪一项准确描述了应依赖的平台契约?

难度: 基础

  • A. TaskScheduler 与操作系统线程是完全相同的概念
  • B. TaskScheduler 决定 Task 工作如何排队和执行,默认调度器通常使用线程池
  • C. TaskScheduler.Current 可能来自当前任务环境,不总等于 Default
  • D. 只要观察到“自定义调度器限制并发执行”,就能把这次现象视为所有环境中的固定行为。
查看答案与解析

正确答案B

正确项给出了TaskScheduler可直接依赖的规则:“TaskScheduler 决定 Task 工作如何排队和执行,默认调度器通常使用线程池”。“TaskScheduler.Current 可能来自当前任务环境,不总等于 Default”是应用规则前必须确认的边界,不是规则本身;“TaskScheduler 与操作系统线程是完全相同的概念”则把常见现象或实现细节扩大成了平台保证。场景“自定义调度器限制并发执行”只能作为排查线索,仍需结合目标框架、发布方式和运行时证据验证。

030 生产环境出现“自定义调度器限制并发执行”时,针对TaskScheduler应如何排查?

难度: 进阶

  • A. 直接采用“TaskScheduler 与操作系统线程是完全相同的概念”解释现象,不再收集目标进程和发布配置证据。
  • B. 只增加机器资源或重启进程,以一次恢复结果代替对“TaskScheduler.Current 可能来自当前任务环境,不总等于 Default”的验证。
  • C. 只检查代码是否能够编译,通过后便认定“TaskScheduler 决定 Task 工作如何排队和执行,默认调度器通常使用线程池”在当前部署中必然成立。
  • D. 先验证“TaskScheduler.Current 可能来自当前任务环境,不总等于 Default”,再使用运行时指标、日志或最小复现检查“TaskScheduler 决定 Task 工作如何排队和执行,默认调度器通常使用线程池”是否成立。
查看答案与解析

正确答案D

“自定义调度器限制并发执行”可能由多条路径造成,不能直接证明根因。合理顺序是先确认边界“TaskScheduler.Current 可能来自当前任务环境,不总等于 Default”,再以“TaskScheduler 决定 Task 工作如何排队和执行,默认调度器通常使用线程池”组织证据。采用误区“TaskScheduler 与操作系统线程是完全相同的概念”、盲目扩容或只看编译结果,都跳过了运行配置与真实调用路径,无法形成可复核的诊断结论。

031 评审TaskScheduler相关实现时,以下哪项判断不成立?

难度: 实战

  • A. TaskScheduler 与操作系统线程是完全相同的概念
  • B. TaskScheduler 决定 Task 工作如何排队和执行,默认调度器通常使用线程池
  • C. TaskScheduler.Current 可能来自当前任务环境,不总等于 Default
  • D. 遇到“自定义调度器限制并发执行”时,应把可观察证据与平台契约分开记录,再验证二者是否一致。
查看答案与解析

正确答案A

题目要求找出不成立的判断,“TaskScheduler 与操作系统线程是完全相同的概念”正是TaskScheduler的典型误区。主规则“TaskScheduler 决定 Task 工作如何排队和执行,默认调度器通常使用线程池”描述了实现应依赖的契约,边界“TaskScheduler.Current 可能来自当前任务环境,不总等于 Default”限制了结论的适用范围。生产场景还需要保留指标、日志、跟踪或转储等证据,不能因为一次成功或失败就反转稳定契约。

032 准备上线涉及TaskScheduler的改动时,哪项验收方案最完整?

难度: 实战

  • A. 依据“TaskScheduler 与操作系统线程是完全相同的概念”完成修改,只要本地运行一次成功就立即发布。
  • B. 按照“TaskScheduler 决定 Task 工作如何排队和执行,默认调度器通常使用线程池”修改代码,但不核对“TaskScheduler.Current 可能来自当前任务环境,不总等于 Default”或目标发布模式。
  • C. 依据“TaskScheduler 决定 Task 工作如何排队和执行,默认调度器通常使用线程池”实现,在“TaskScheduler.Current 可能来自当前任务环境,不总等于 Default”成立的环境中验证,并为“自定义调度器限制并发执行”保留可观测证据和回退条件。
  • D. 只验证“TaskScheduler.Current 可能来自当前任务环境,不总等于 Default”,实现仍继续依赖“TaskScheduler 与操作系统线程是完全相同的概念”这一未经证明的假设。
查看答案与解析

正确答案C

完整验收必须同时覆盖规则、边界和生产证据:实现遵守“TaskScheduler 决定 Task 工作如何排队和执行,默认调度器通常使用线程池”,部署环境满足“TaskScheduler.Current 可能来自当前任务环境,不总等于 Default”,并能在“自定义调度器限制并发执行”出现时定位和回退。其余方案分别依赖错误假设、遗漏环境验证或只检查边界却保留错误实现,均不能证明改动在生产环境中安全。

033 关于同步等待死锁,哪一项准确描述了应依赖的平台契约?

难度: 基础

  • A. 任何 Task.Result 在所有 .NET 应用中都会必然死锁
  • B. 是否死锁取决于上下文和调用链,但同步阻塞仍会带来线程占用风险
  • C. 在需要回到被阻塞上下文的异步调用链上使用 Result 或 Wait 可能形成互相等待
  • D. 只要观察到“UI 线程同步等待异步方法后界面冻结”,就能把这次现象视为所有环境中的固定行为。
查看答案与解析

正确答案C

正确项给出了同步等待死锁可直接依赖的规则:“在需要回到被阻塞上下文的异步调用链上使用 Result 或 Wait 可能形成互相等待”。“是否死锁取决于上下文和调用链,但同步阻塞仍会带来线程占用风险”是应用规则前必须确认的边界,不是规则本身;“任何 Task.Result 在所有 .NET 应用中都会必然死锁”则把常见现象或实现细节扩大成了平台保证。场景“UI 线程同步等待异步方法后界面冻结”只能作为排查线索,仍需结合目标框架、发布方式和运行时证据验证。

034 生产环境出现“UI 线程同步等待异步方法后界面冻结”时,针对同步等待死锁应如何排查?

难度: 进阶

  • A. 直接采用“任何 Task.Result 在所有 .NET 应用中都会必然死锁”解释现象,不再收集目标进程和发布配置证据。
  • B. 只增加机器资源或重启进程,以一次恢复结果代替对“是否死锁取决于上下文和调用链,但同步阻塞仍会带来线程占用风险”的验证。
  • C. 只检查代码是否能够编译,通过后便认定“在需要回到被阻塞上下文的异步调用链上使用 Result 或 Wait 可能形成互相等待”在当前部署中必然成立。
  • D. 先验证“是否死锁取决于上下文和调用链,但同步阻塞仍会带来线程占用风险”,再使用运行时指标、日志或最小复现检查“在需要回到被阻塞上下文的异步调用链上使用 Result 或 Wait 可能形成互相等待”是否成立。
查看答案与解析

正确答案D

“UI 线程同步等待异步方法后界面冻结”可能由多条路径造成,不能直接证明根因。合理顺序是先确认边界“是否死锁取决于上下文和调用链,但同步阻塞仍会带来线程占用风险”,再以“在需要回到被阻塞上下文的异步调用链上使用 Result 或 Wait 可能形成互相等待”组织证据。采用误区“任何 Task.Result 在所有 .NET 应用中都会必然死锁”、盲目扩容或只看编译结果,都跳过了运行配置与真实调用路径,无法形成可复核的诊断结论。

035 评审同步等待死锁相关实现时,以下哪项判断不成立?

难度: 实战

  • A. 在需要回到被阻塞上下文的异步调用链上使用 Result 或 Wait 可能形成互相等待
  • B. 任何 Task.Result 在所有 .NET 应用中都会必然死锁
  • C. 是否死锁取决于上下文和调用链,但同步阻塞仍会带来线程占用风险
  • D. 遇到“UI 线程同步等待异步方法后界面冻结”时,应把可观察证据与平台契约分开记录,再验证二者是否一致。
查看答案与解析

正确答案B

题目要求找出不成立的判断,“任何 Task.Result 在所有 .NET 应用中都会必然死锁”正是同步等待死锁的典型误区。主规则“在需要回到被阻塞上下文的异步调用链上使用 Result 或 Wait 可能形成互相等待”描述了实现应依赖的契约,边界“是否死锁取决于上下文和调用链,但同步阻塞仍会带来线程占用风险”限制了结论的适用范围。生产场景还需要保留指标、日志、跟踪或转储等证据,不能因为一次成功或失败就反转稳定契约。

036 准备上线涉及同步等待死锁的改动时,哪项验收方案最完整?

难度: 实战

  • A. 依据“在需要回到被阻塞上下文的异步调用链上使用 Result 或 Wait 可能形成互相等待”实现,在“是否死锁取决于上下文和调用链,但同步阻塞仍会带来线程占用风险”成立的环境中验证,并为“UI 线程同步等待异步方法后界面冻结”保留可观测证据和回退条件。
  • B. 依据“任何 Task.Result 在所有 .NET 应用中都会必然死锁”完成修改,只要本地运行一次成功就立即发布。
  • C. 按照“在需要回到被阻塞上下文的异步调用链上使用 Result 或 Wait 可能形成互相等待”修改代码,但不核对“是否死锁取决于上下文和调用链,但同步阻塞仍会带来线程占用风险”或目标发布模式。
  • D. 只验证“是否死锁取决于上下文和调用链,但同步阻塞仍会带来线程占用风险”,实现仍继续依赖“任何 Task.Result 在所有 .NET 应用中都会必然死锁”这一未经证明的假设。
查看答案与解析

正确答案A

完整验收必须同时覆盖规则、边界和生产证据:实现遵守“在需要回到被阻塞上下文的异步调用链上使用 Result 或 Wait 可能形成互相等待”,部署环境满足“是否死锁取决于上下文和调用链,但同步阻塞仍会带来线程占用风险”,并能在“UI 线程同步等待异步方法后界面冻结”出现时定位和回退。其余方案分别依赖错误假设、遗漏环境验证或只检查边界却保留错误实现,均不能证明改动在生产环境中安全。

037 关于延续调度,哪一项准确描述了应依赖的平台契约?

难度: 基础

  • A. Task 延续可能同步内联或异步排队,调用方不应依赖固定线程编号作为正确性条件
  • B. ContinueWith 后的代码总在创建任务的线程执行
  • C. 需要隔离同步延续时应明确使用相应创建选项并验证队列行为
  • D. 只要观察到“完成源任务时延续占用生产者调用栈”,就能把这次现象视为所有环境中的固定行为。
查看答案与解析

正确答案A

正确项给出了延续调度可直接依赖的规则:“Task 延续可能同步内联或异步排队,调用方不应依赖固定线程编号作为正确性条件”。“需要隔离同步延续时应明确使用相应创建选项并验证队列行为”是应用规则前必须确认的边界,不是规则本身;“ContinueWith 后的代码总在创建任务的线程执行”则把常见现象或实现细节扩大成了平台保证。场景“完成源任务时延续占用生产者调用栈”只能作为排查线索,仍需结合目标框架、发布方式和运行时证据验证。

038 生产环境出现“完成源任务时延续占用生产者调用栈”时,针对延续调度应如何排查?

难度: 进阶

  • A. 直接采用“ContinueWith 后的代码总在创建任务的线程执行”解释现象,不再收集目标进程和发布配置证据。
  • B. 先验证“需要隔离同步延续时应明确使用相应创建选项并验证队列行为”,再使用运行时指标、日志或最小复现检查“Task 延续可能同步内联或异步排队,调用方不应依赖固定线程编号作为正确性条件”是否成立。
  • C. 只增加机器资源或重启进程,以一次恢复结果代替对“需要隔离同步延续时应明确使用相应创建选项并验证队列行为”的验证。
  • D. 只检查代码是否能够编译,通过后便认定“Task 延续可能同步内联或异步排队,调用方不应依赖固定线程编号作为正确性条件”在当前部署中必然成立。
查看答案与解析

正确答案B

“完成源任务时延续占用生产者调用栈”可能由多条路径造成,不能直接证明根因。合理顺序是先确认边界“需要隔离同步延续时应明确使用相应创建选项并验证队列行为”,再以“Task 延续可能同步内联或异步排队,调用方不应依赖固定线程编号作为正确性条件”组织证据。采用误区“ContinueWith 后的代码总在创建任务的线程执行”、盲目扩容或只看编译结果,都跳过了运行配置与真实调用路径,无法形成可复核的诊断结论。

039 评审延续调度相关实现时,以下哪项判断不成立?

难度: 实战

  • A. Task 延续可能同步内联或异步排队,调用方不应依赖固定线程编号作为正确性条件
  • B. 需要隔离同步延续时应明确使用相应创建选项并验证队列行为
  • C. ContinueWith 后的代码总在创建任务的线程执行
  • D. 遇到“完成源任务时延续占用生产者调用栈”时,应把可观察证据与平台契约分开记录,再验证二者是否一致。
查看答案与解析

正确答案C

题目要求找出不成立的判断,“ContinueWith 后的代码总在创建任务的线程执行”正是延续调度的典型误区。主规则“Task 延续可能同步内联或异步排队,调用方不应依赖固定线程编号作为正确性条件”描述了实现应依赖的契约,边界“需要隔离同步延续时应明确使用相应创建选项并验证队列行为”限制了结论的适用范围。生产场景还需要保留指标、日志、跟踪或转储等证据,不能因为一次成功或失败就反转稳定契约。

040 准备上线涉及延续调度的改动时,哪项验收方案最完整?

难度: 实战

  • A. 依据“ContinueWith 后的代码总在创建任务的线程执行”完成修改,只要本地运行一次成功就立即发布。
  • B. 按照“Task 延续可能同步内联或异步排队,调用方不应依赖固定线程编号作为正确性条件”修改代码,但不核对“需要隔离同步延续时应明确使用相应创建选项并验证队列行为”或目标发布模式。
  • C. 只验证“需要隔离同步延续时应明确使用相应创建选项并验证队列行为”,实现仍继续依赖“ContinueWith 后的代码总在创建任务的线程执行”这一未经证明的假设。
  • D. 依据“Task 延续可能同步内联或异步排队,调用方不应依赖固定线程编号作为正确性条件”实现,在“需要隔离同步延续时应明确使用相应创建选项并验证队列行为”成立的环境中验证,并为“完成源任务时延续占用生产者调用栈”保留可观测证据和回退条件。
查看答案与解析

正确答案D

完整验收必须同时覆盖规则、边界和生产证据:实现遵守“Task 延续可能同步内联或异步排队,调用方不应依赖固定线程编号作为正确性条件”,部署环境满足“需要隔离同步延续时应明确使用相应创建选项并验证队列行为”,并能在“完成源任务时延续占用生产者调用栈”出现时定位和回退。其余方案分别依赖错误假设、遗漏环境验证或只检查边界却保留错误实现,均不能证明改动在生产环境中安全。

官方资料

当前分类

.NET 异步与并发选择题

查看全部分类 →
  1. 01.NET 异步并发试题 01:ThreadPool 与工作线程20 题
  2. 02.NET 异步并发试题 02:SynchronizationContext 与 TaskScheduler20 题
  3. 03.NET 异步并发试题 03:ExecutionContext、AsyncLocal 与上下文传播20 题
  4. 04.NET 异步并发试题 04:async 状态机与异步分配20 题
  5. 05.NET 异步并发试题 05:背压、有界 Channel 与生产者消费者20 题
ESC

输入关键词开始搜索