如何在 C# 中在定义的时间段内保持整个进程执行,包括所有正在运行的线程
Posted
技术标签:
【中文标题】如何在 C# 中在定义的时间段内保持整个进程执行,包括所有正在运行的线程【英文标题】:How to hold whole process execution including all it's running threads for defined period of time in C# 【发布时间】:2020-08-31 07:31:35 【问题描述】:我有一个进程运行多个线程与软件和硬件组件通信。
出于测试目的,需要模拟断开连接和超时。进程执行保持模拟所有子组件的通信超时。目前这可以通过在调试模式下运行并设置断点来完成。在断点时,所有线程都被暂停执行并且所有超时都会发生。 但在自动化测试中,断点不是一种选择。
如何才能让包括所有正在运行的线程在内的整个进程保持 x 秒?
编辑#1:我正在寻找一种通用方法来保持整个过程的执行,包括所有正在运行的任务(线程)——一种没有断点的真正断点行为。而不是一种自动恢复流程的方式。
编辑#2:This 问题的答案可能有效。似乎需要进行一些调整。
【问题讨论】:
x-y 问题。真的应该是“如何故意诱导超时以进行测试”。 “如何为测试故意引入超时”问题有很多答案。最好是创建一个在需要时会导致超时的模拟。可悲的是,这不是我的选择。关闭进程/端口可能会导致断开连接,但是恢复将是不同的/不可能的。我正在寻找更通用的解决方案。 【参考方案1】:出于调试目的,在 Visual Studio 中,您可以使用 Debug>Windows>Threads 窗口轻松完成此操作。 在那里,您可以随意冻结和解冻踏板。
编辑:为了在单元测试时执行此操作,您需要构建自己的冻结机制,假设每个线程都有一个运行循环,您可以在其中检查某些全局冻结状态以暂停执行。
【讨论】:
感谢您的回答。由于线程在“等待”通信答案,我无法在那里实现冻结。我需要一个更全局的停止 - 与断点行为相同。以上是关于如何在 C# 中在定义的时间段内保持整个进程执行,包括所有正在运行的线程的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# MVC 应用程序中在运行时创建 SQL Server Express 数据库?
当所有进程都在 c# 的单独线程上运行时,如何保持控制台应用程序打开?