C# 中暂停/恢复线程

2023-12-03

当达到某个值时,我尝试暂停所有线程,但我做不到。

我希望当我达到这个值时,所有线程都暂停 10 秒,并在这 10 秒后所有线程再次启动。

我尝试过:Threads.Sleep(); | Threads.Interrupt(); and Threads.Abort();但没有任何作用。

我尝试了您在下面的代码中看到的内容。

        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                Threads.Add(new Thread(new ThreadStart(example)));
                Threads[i].Start();
            }

            for (int i = 0; i < Threads.Count; i++)
                Threads[i].Join();
        }

        static void example()
        {           
            while (true)
            {
                Console.WriteLine(value++);
                checkValue();
            }
        }
        public static void checkValue()
        {
            if (value% 1000 == 0 && value!= 0)
            {
                for (int i = 0; i < Threads.Count; i++)
                    Threads[i].Interrupt();

                Thread.Sleep(1000);

                for (int i = 0; i < Threads.Count; i++)
                    Threads[i].Resume();
            }
        }

这是一个协作暂停一些线程的示例,方法是使用PauseTokenSource + PauseToken斯蒂芬·克利里 (Stephen Cleary) 的一双AsyncEx.协调包裹。这个例子还展示了类似的使用CancellationTokenSource + CancellationToken一对,那个inspired上述暂停机制的创建。

var pts = new PauseTokenSource() { IsPaused = true };
var cts = new CancellationTokenSource();
int value = 0;

// Create five threads
Thread[] threads = Enumerable.Range(1, 5).Select(i => new Thread(() =>
{
    try
    {
        while (true)
        {
            cts.Token.ThrowIfCancellationRequested(); // self explanatory
            pts.Token.WaitWhilePaused(cts.Token); // ...and don't wait if not paused
            int localValue = Interlocked.Increment(ref value);
            Console.WriteLine($"Thread #{i}, Value: {localValue}");
        }
    }
    catch (OperationCanceledException) // this exception is expected and benign
    {
        Console.WriteLine($"Thread #{i} Canceled");
    }
})).ToArray();

// Start the threads
foreach (var thread in threads) thread.Start();

// Now lets pause and unpause the threads periodically some times
// We use the main thread (the current thread) as the controller
Thread.Sleep(500);
pts.IsPaused = false;
Thread.Sleep(1000);
pts.IsPaused = true;
Thread.Sleep(1000);
pts.IsPaused = false;
Thread.Sleep(1000);
pts.IsPaused = true;
Thread.Sleep(500);

// Finally cancel the threads and wait them to finish
cts.Cancel();
foreach (var thread in threads) thread.Join();

您可能需要阅读this首先,了解.NET平台合作取消所使用的模型。合作“暂停”非常相似。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中暂停/恢复线程 的相关文章

  • 不带()的sizeof有什么作用? [复制]

    这个问题在这里已经有答案了 作者是这个问题 https stackoverflow com questions 18898410 2 dimensional array simple understanding当我问他什么时 他只是取笑我s
  • 类似于 Active Directory 中的搜索

    我正在使用 C 中的以下代码搜索 LDAP 以轮询用户的活动目录 DirectoryEntry entry new DirectoryEntry ldapPath userName password DirectorySearcher Se
  • 来自 RAZOR 中不同文件夹的 RenderPartial

    我一直在尝试将我的 aspx 页面转换为 cshtml 并且在从另一个文件夹渲染部分页面时遇到问题 我以前做过的事 我认为等价的是 Html RenderPartial Views Inquiry InquiryList cshtml Mo
  • 如何利用磁盘 IO 队列

    我需要从 3 7 GB 文件中读取小数据序列 我需要阅读的职位是不相邻 但我可以命令 IO 以便从头到尾读取文件 该文件存储在 iSCSI SAN 上 该 SAN 应该能够处理 优化排队 IO 问题是 如何一次性请求我需要的所有数据 位置
  • C中的内存使用问题

    请帮忙 操作系统 Linux 其中 sleep 1000 中 此时 top 显示Linux任务 给我写了7 7 MEM使用 valgrind 未发现内存泄漏 我明白 写得正确 所有 malloc 结果都是 NULL 但是为什么这次 睡眠 我
  • 在 C# 中将“set”添加到接口的属性中

    我希望通过为该接口中的属性提供设置访问器来 扩展 该接口 界面看起来像这样 interface IUser string UserName get 我想要这样的东西 interface IMutableUser IUser string U
  • 将一个文件写入.c中的另一个文件

    我有一个读取文件然后将其内容复制到另一个文件的代码 我需要使其仅复制每 20 个符号 然后跳过 10 个符号 然后再次跳过 20 个符号 依此类推 我必须使用 lseek 函数 但我不知道如何将所有这些放入循环中来执行此操作 main ar
  • 尝试使用指向 ODBC DSN 的连接字符串时出现关键字不支持异常

    我为我的 Asp Net MVC 应用程序的数据库访问创建了一个 ODBC DSN 主要原因之一是它可以轻松地将数据库凭据 例如服务器地址 端口 用户名和密码 置于源代码控制之外 而不会妨碍我的发布能力 所以我将连接更改为DSN MyDSN
  • 如何混淆整数?

    我需要从 C 中的整数列表生成唯一值的列表 我以为是 MD5 或类似的 但它们生成了太多字节 整数大小为 2 个字节 例如 我想获得单向通信 0 gt ARY812Q3 1 gt S6321Q66 2 gt 13TZ79K2 因此 在证明哈
  • 更改 RabbitMQ 队列中的参数

    我有一个 RabbitMQ 队列 最初声明如下 var result channel QueueDeclare NewQueue true false false null 我正在尝试添加死信交换 因此我将代码更改为 channel Exc
  • Windows 10 ScrollIntoView() 不会滚动到列表视图中间的项目

    我有一个包含 20 个项目的列表视图 我想以编程方式滚动列表视图 ListView ScrollIntoView ListView Items 0 将滚动列表视图到第一项 ListView ScrollIntoView ListView I
  • 私有方法和属性的 JetBrains Rider C# 命名风格

    我想将私有方法的首字母设为小写 将公共方法的首字母设为大写 然而 在 Rider 中 C 命名风格下似乎只有一个选项可以应用所有方法 属性和事件 告诉 Rider 仅对私人使用不同约定的最佳方式是什么 也可以看看 私有方法和属性的 ReSh
  • Fluent NHibernate 一对一映射

    我很难利用 Fluent NHibernate 的 HasOne 映射 基本上 A 类在 B 类中可以有匹配的 只有一条或没有 记录 请帮助定义关系的 AMap 和 BMap 类 谢谢 public class A public virtu
  • ThemeInfo 属性有什么用?

    每当我创建新的 WPF 应用程序或 WPF 用户控件库时 AssemblyInfo cs文件包含以下属性 assembly ThemeInfo ResourceDictionaryLocation None where theme spec
  • thread_local成员变量构造

    我遇到了 thread local 的一些奇怪行为 不确定我是否做错了什么或者这是一个 GCC 错误 我有以下最小重现场景 include
  • 使用资源文件进行本地化不起作用

    我添加了新的 Rosource 文件 UserNotification resx 然后我添加了两个文件进行本地化 并将其命名为 UserNotification hr HR resx 和 UserNotification sl SI res
  • opencv中矩阵的超快中值(与matlab一样快)

    我正在 openCV 中编写一些代码 想要找到一个非常大的矩阵数组 单通道灰度 浮点数 的中值 我尝试了几种方法 例如对数组进行排序 使用 std sort 和选择中间条目 但与 matlab 中的中值函数相比 它非常慢 准确地说 在 ma
  • Qt、PushButton、id 属性?有什么方法可以知道点击了哪个按钮

    void MainWindow addRadioToUI int button cunter 4 while database isEmpty button cunter QPushButton one new QPushButton Pl
  • 如何只应用一种 clang-format 操作?

    我想用clang 格式调整我的评论 但仅此而已 选项是 AlignTrailingComments bool 但是当我运行以下命令时 clang format 3 6 i style AlignTrailingComments true
  • 如何将谓词作为参数传递#

    如何将谓词传递到方法中 但在没有传递谓词的情况下仍使其工作 我想也许是这样的 但似乎并不正确 private bool NoFilter return true private List

随机推荐

  • 如何比较从 url 到 NSutf8stringencoding 的字符串返回 1 或 0 与普通字符串 @"1"

    我需要使用比较 url 中的字符串NSutf8stringencoding以便返回 1 或 0 但即使字符串值为 1 它也始终返回 0 NSString strURL NSString stringWithFormat http local
  • 使用自定义表情符号创建软键盘

    我的任务是创建一个新的 android3rd party keyboard支持来自资产的自定义表情符号 我自己的图标 我想用我自己的表情符号图标实现一个软键盘不使用 Unicode 或我的自定义 Unicode 问题 如果我创建一个自定义表
  • PHPUnit + Selenium:如何设置 Firefox about:config 选项?

    使用 PHPUnit 和 Firefox 远程运行 Selenium 测试时 onChange 事件不会像用户操作浏览器时那样被触发 解决这个问题的方法似乎是设置focusmanager testmode选项true在 Firefox 的偏
  • 回发期间 GridView.DataSource 为空

    我想从我的应用程序中的每个 Gridview 实现打印 下载 csv 那些通过数据源或直接通过 gvSample DataSource Data gvSample DataBind 现在我的第一个方法是在页脚模板中设置一个下载按钮并在那里处
  • 从 .m matlab 文件中声明的矩阵创建 numpy 数组

    一位同事留下了一些我想用 Numpy 分析的数据文件 每个文件都是一个 matlab 文件 例如data m 并具有以下格式 但有更多的列和行 values 24 92 23 66 22 55 24 77 23 56 22 45 24 54
  • 查找并替换数组中的特定哈希及其值

    在数组中查找特定哈希并就地替换其值的最有效方法是什么 以便数组也发生更改 到目前为止 我已经得到了这段代码 但在具有大量数据的实际应用程序中 这成为应用程序中最慢的部分 这可能会泄漏内存 因为当我对每个 websocket 消息执行此操作时
  • 实体框架对同一个表的多次引用

    我在使用 EF 代码优先创建数据库时遇到问题 我有一个实体播放器和一个实体炸船 每个友谊都涉及两个玩家 其中一名玩家是友谊的发送者 另一位是友谊的接收者 这是我的实体 播放器 cs public class Player public in
  • 如何避免 STRING_AGG 函数中的重复

    我的查询如下 select u Id STRING AGG sf Naziv as Ustrojstvena jedinica ISNULL CONVERT varchar 200 STRING AGG TRIM p Naziv 121 a
  • 如何从 groovy/grails 查询 mongodb?

    我是否必须有一个域对象才能查询mongodb 如果我只想显示一些原始数据怎么办 查询的语法是什么mongodb从我的控制器 I tried def var db nameOfMyCollection find 但它说我的控制器类中没有 db
  • 优化 .NET 中 System.Drawing 的 PNG 输出 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我有一个例程 它读取图像
  • BeautifulSoup 返回与查看源代码不同的 html

    我是使用 BeautifulSoup 的新手 所以如果我的问题很愚蠢 请原谅我 然而 自早上 6 点以来 我一直在谷歌上搜索并尝试在每个 stackoverflow 线程中尝试建议 但无济于事 我的问题是我有一个带有基因名称的 csv 文件
  • perl:执行多个系统进程并等待它们完成

    目前 在我的 Perl 脚本中 我进行如下调用 system long program1 long program2 long program3 wait 我希望能够记录每个长时间运行的命令执行的时间 同时仍然异步执行它们 我知道系统调用会
  • Python Altair 生成选择表

    我有一个包含一堆分箱数据的直方图 我想知道如果我从直方图中选择一个条形 是否可以生成一个表格 并且它会显示原始数据框中的数据 您可以使用以下命令创建表格的外观mark text 这是基于文档中此页面的示例 import altair as
  • 在 Spring 5 中与子级共享父级 Spring 上下文

    如何在 Spring 5 中与孩子共享父上下文 使用 spring 4 我们可以通过locatorFactorySelector as context param
  • 使用 jQuery 调用远程 ASMX 的问题

    我一直在尽力正确理解这一点 XML SOAP 和 JSON 响应之间有什么区别 人们如何知道如何调用其响应为上述之一的 Web 服务 如果我偏离了轨道 请纠正我 我问这个问题的原因是因为我试图在我的 NET3 5 web应用程序中从jQue
  • Codeigniter - Active Records 是否容易受到 SQL 注入攻击?

    刚刚读过this堆栈溢出 因此让我想知道是否可以通过 CI 中的活动记录进行 SQL 注入 在我的项目中的大多数地方 对于用户注册和用户配置文件更新 我都完成了如下 SQL 插入 控制器 name this gt input gt post
  • Katalon 和 Chrome 无头模式的屏幕截图

    我使用以下代码来截取 Katalon Studio 脚本中警告和错误消息的屏幕截图 import ru yandex qatools ashot AShot import ru yandex qatools ashot Screenshot
  • 如何将 React 开发工具与 React Native 结合使用?

    我目前正在使用 React Native 来开发 Android 应用程序 并在 genymotion 中进行模拟 我尝试使用反应开发人员工具调试我的应用程序 如下所述here JS 错误在控制台中抛出 但我无法在 chrome 开发工具中
  • Outlook .items.restrict 使用两个过滤器

    我正在使用一个打开电子邮件并下载其附件的脚本 现在我可以选择下载最新电子邮件中的最新附件 Sub CTEmailAttDownload Const olFolderInbox As Integer 6 gt Path for the att
  • C# 中暂停/恢复线程

    当达到某个值时 我尝试暂停所有线程 但我做不到 我希望当我达到这个值时 所有线程都暂停 10 秒 并在这 10 秒后所有线程再次启动 我尝试过 Threads Sleep Threads Interrupt and Threads Abor