如何实现多线程并行执行多个任务?

2023-12-07

我是线程编程的新手。我必须在并行和后台运行一些任务(以便主 UI 执行线程保持对用户操作的响应),并等待每一项任务完成,然后再继续进一步执行。

就像是:

foreach(MyTask t in myTasks)
{
  t.DoSomethinginBackground(); // There could be n number of task, to save 
                               // processing time I wish to run each of them 
                               // in parallel
}

// Wait till all tasks complete doing something parallel in background


Console.Write("All tasks Completed. Now we can do further processing");

我知道可以通过多种方法来实现这一目标。但我正在寻找在 .Net 4.0 (C#) 中实现的最佳解决方案。


对我来说,这似乎是你想要的Parallel.ForEach

Parallel.ForEach(myTasks, t => t.DoSomethingInBackground());

Console.Write("All tasks Completed. Now we can do further processing");

您还可以在一个循环中执行多个任务

List<string> results = new List<string>(myTasks.Count);
Parallel.ForEach(myTasks, t =>
{
    string result = t.DoSomethingInBackground();
    lock (results)
    { // lock the list to avoid race conditions
        results.Add(result);
    }
});

为了让主 UI 线程保持响应,您将需要使用BackgroundWorker并订阅其DoWork and RunWorkerCompleted事件,然后调用

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

如何实现多线程并行执行多个任务? 的相关文章

  • C# AES Rijndael - 检测无效密码

    我正在使用 Rijndael 加密程序中的一些敏感数据 当用户输入错误的密码时 大多数情况下CryptographicException抛出消息 填充无效且无法删除 然而 CryptStream 不会抛出密码错误的异常 而是返回错误解密的流
  • HttpResponseMessage 的内容为 JSON

    我有一个 ASP NET MVC WEB API 由于多种原因 由于没有授权而重定向 我不能只使用一个简单的对象并在我的控制器方法中返回它 因此我需要 HttpResponseMessage 类来允许我重定向 目前我正在这样做 var re
  • 使用 QTextCursor 选择一段文本

    使用 Qt 框架选择文本片段时遇到问题 例如 如果我有这个文件 没有时间休息 我想选择 ime for r 并从文档中删除这段文本 我应该如何使用 QTextCursor 来做到这一点 这是我的代码 QTextCursor cursor n
  • ZedGraph 缩放和调整大小

    当我绘制图形 放大和缩小并重新绘制图形时 图形的位置不会改变 我想要做的是 每当重新绘制数据时 视图都会更改以查看所有图形数据 如果您在重绘之前放大或缩小 这似乎会被禁用 Thanks 设置属性 IsZoomOnMouseCenter对于控
  • Java 创建 Thread 实例时会发生什么

    我有一个关于 Java 线程和操作系统线程的问题 我读了Java 线程与 Pthreads https stackoverflow com questions 5269535 java threads vs pthreads and Jav
  • 无法在更新面板中找到上传的文件

    aspx
  • C++17 中带有 noexcept 的 std::function

    在 C 17 中noexcept 已添加到类型系统中 http www open std org jtc1 sc22 wg21 docs papers 2015 p0012r1 html void r1 void f noexcept f
  • 函数原型和数组参数

    我正在学习 C 语法 并且已经开始研究数组了 我想问你一个问题 但首先让我回顾一下 这样我就知道我已经弄清楚了 我知道您可以使用以下语法将变量定义为数组 name
  • 如何获取任意类型的默认值

    在 C 中我可以写这样的东西 class AnyThing
  • 使用 boost::iterator_facade<>

    我有一个链表结构 struct SomeLinkedList const char bar int lots of interesting stuff in here DWORD foo SomeLinkedList pNext 它是现有
  • “volatile void function( ... )” 做了什么?

    我见过从语法角度来看 C 函数中 volatile 关键字有多少种用法 https stackoverflow com questions 7643528 how many usage does volatile keyword have
  • 锁定文件的一个块

    我有一个大小为 192k 的文件 我想锁定文件的中间部分 例如 我想用 c 锁定文件的 64k 128k 知道如何锁定文件的那部分吗 你需要使用锁定文件Ex http msdn microsoft com en us library win
  • 如何忽略搜索条件中的空属性

    我有一个不好的要求要做 无论如何 我必须在我的应用程序中实现它 我有一个Track class public class Track public string Name get set public string City get set
  • 一些涉及类析构函数和删除运算符的内存管理问题?

    在阅读了一些教程后 我仍然不清楚 C 中内存管理的一些观点 1 当使用 new 运算符声明的类超出范围时 是否会调用其析构函数并释放内存 是否有必要调用删除运算符来释放类的内存并调用其析构函数 class Test void newTest
  • C语言:如何获取使用strtok()一次后剩余的字符串

    我的字符串是 A B C D E 分隔符是 如何获取执行 strtok 一次后剩余的字符串 即 B C D E char a A B C D E char separator char b strtok a separator printf
  • 如何最好地为 Visual Studio 2017 构建的 CMake C++ 项目设置输出目录?

    我使用 Visual Studio 2017 使用 vcxproj 文件构建 C 桌面项目 我喜欢默认行为 其中输出目录是项目下面的子目录 例如 myproj sln myproj vcxproj x64 myproj release my
  • 从 Perl 线程生成 Expect

    我正在编写一个脚本 该脚本需要定期 每 5 分钟 生成一个 Expect 进程来完成一些工作 下面是我的代码 它生成一个 Expect 进程并执行一些工作 脚本的主要进程始终在做一些其他工作 例如它可能等待用户输入 因为我在一个线程中调用这
  • 即使对于新上下文,OnModelCreating 也仅调用一次

    我有多个相同但内容不同的 SQL Server 表 在编写代码优先 EF6 程序时 我尝试为每个程序重用相同的数据库上下文 并将表名称传递给上下文构造函数 然而 虽然每次都会调用构造函数 但尽管每次都是从 new 创建数据库上下文 但 On
  • 没有运算符“<<”与这些操作数匹配[重复]

    这个问题在这里已经有答案了 不知道发生了什么事 我查看了与此问题类似的其他帖子 但到目前为止没有解决方案有帮助 这是带有错误部分注释的代码 在某一时刻 它说 不起作用 而在代码的其余部分中 它说 include
  • 通过 OCI 调用 Oracle 存储过程并使用 C++ 中的 out ref 游标返回结果

    我想使用 OCI 接口从 C 调用 Oracle 存储过程 并使用 out SYS REF CURSOR 作为过程的参数来迭代结果 我是 OCI 新手 所以可能会遗漏一些简单的东西 大部分代码取自这里 我的存储过程是 CREATE OR R

随机推荐

  • android ProgressBar在下载过程中更新

    在我的文件下载应用程序中 有一个 ListView 每一行都包含属性文件和一个用于下载其状态的进度栏 我使用视图持有者模式 但进度栏不更新 Override protected void onProgressUpdate Long valu
  • Selenium 驱动的 ChromeDriver 找不到 Chrome 二进制文件

    我刚刚卸载了 Chrome 因为它表现得很奇怪 现已修复 之后 Python 中的 Selenium 无法识别 Chrome 驱动程序二进制文件 这非常奇怪 因为它应该完全不受影响 并且位于不同的位置和不同的版本从我在桌面上使用的 Chro
  • 如何从 OData Atom feed 反序列化对象?

    我正在尝试解析来自 OData REST 服务的响应 当响应是JSON格式时 很容易使用ReadAsJsonDataContractWCF REST 入门工具包中的方法 然而 如果响应是 Atom feed 事情似乎会更加复杂 这是一个例子
  • 根据余弦相似度值进行聚类

    我从一组 URL 中提取了单词 并计算了每个 URL 内容之间的余弦相似度 而且我还标准化了 0 1 之间的值 使用最小 最大 现在我需要根据余弦相似度值对 URL 进行聚类以查找找出类似的 URL 哪种聚类算法最合适 请建议我一种动态聚类
  • 应用程序安装失败:未知错误 Xcode 7

    我的应用程序在模拟器中运行良好 但当我尝试将其安装在 iPhone 上时 它说 应用程序安装失败 发生未知错误 我打开设备日志并得到以下信息 11 月 12 日 21 17 19 Isaacs iPhone Streaming zip co
  • 简化为派系问题

    子图同构 我们有图 G 1 V 1 E 1 G 2 V 2 E 2 Question 图 G 1 与 G 2 的子图同构吗 即 是否存在 G 2 V V 2 的顶点子集和 G 2 E E 2 边的子集 使得 V V 1 和 E E 1 并且
  • 是否保证新实体的数字自增ID始终大于现有ID?

    是否保证新实体的自动递增ID始终大于现有ID 基本上 我想定期将后台任务中的实体 例如评论 转储到客户创建的大块中 因此 如果现在有 100 个实体 我会将它们存储在 blob 中 并为该 blob 创建辅助实体 例如 class Blob
  • Google Apps 脚本:使用电子表格范围作为参数从菜单调用函数[重复]

    这个问题在这里已经有答案了 我有一个函数 它接受电子表格范围作为参数 然后在给定范围的同一行中添加日期 function autoDate cell var currentDate new Date var currentMonth cur
  • Entity Framework Core 多对多导航问题

    Entity Framework Core 尚未实现多对多关系 如 GitHub 问题中所述 1368 但是 当我按照该问题中的导航示例或类似的答案在 Stack Overflow 上 我的枚举未能产生结果 我的照片和标签之间存在多对多关系
  • 无法比较 SqlBulkCopy 中的列

    这是我的代码 protected void Button1 Click object sender EventArgs e string strFileType System IO Path GetExtension FileUpload1
  • “对齐陷阱”错误意味着什么?

    我的一位朋友在尝试调试开始显示 对齐陷阱 错误的代码时遇到了一个大问题 当特定函数访问全局结构时 就会出现问题 经过在网络上的一些研究 仍然不清楚 对齐陷阱 是什么意思或是什么 有人可以给出一个解释 特别注意通常导致对齐陷阱的原因以及解决问
  • ActionEvent e 是什么意思?

    我正在学习 Java 非常想更深入地了解 ActionEvent e 参数的含义和代表的含义 当我编码时 我不只是想吐出有效的代码 但我不明白 我想在使用概念之前充分理解它们 那么它具体要求什么以及两个部分 ActionEvent 和 e
  • 使用 tidytext 和 broom 但没有找到 LDA_VEM 的 tidier

    tidytext 书中提供了主题模型 tidier 的示例 library tidyverse library tidytext library topicmodels library broom year word counts lt t
  • 扩展 Mach-O 文件中的部分

    我正在尝试从 Dyld shared cache 中提取库 并且需要修复外部引用 例如 中的指针 DATA objc selrefs部分通常指向 mach o 文件外部的数据 为了解决这个问题 我必须从 dyld 复制相应的 c 字符串并将
  • “分段错误(核心转储)”:libioP.h、printf-parse.h、vfprintf-internal.c 等的“没有此类文件或目录”

    核心转储文件中的示例错误 1289 vfprintf internal c No such file or directory 111 printf parse h No such file or directory 948 libioP
  • MVC 中公共字段与属性的数据注释

    为什么 DataAnnotations 不适用于公共字段 例子 namespace Models public class Product Display Name Name public string Title get set publ
  • React Native:如何将 require(path) 与动态 url 一起使用?

    我想使用WebView来显示一些html内容 这是一个例子 return
  • ORM / 如何处理Domain对象和Persistent对象的对应关系?

    在应用程序中 至少有两种方法来处理域对象持久性和 ORM 使用某种 ORM xml 或注释 将域对象直接映射到持久性 Making 关注点分离如果您的域和持久模型 表列 之间存在大量阻抗不匹配 这意味着 域对象与持久性无关 并且存在一些到某
  • 每次打开项目时 Xcode 都会意外退出

    打开 xcode 后 当我打开当前项目时 它会显示类似 xcode 意外退出 的警告 并有 3 个选项 忽略 报告 和 重新打开 当我单击 重新打开 时 它将打开 xcode 窗口 然后再次自动关闭并显示相同的警告 为什么会发生这种情况 如
  • 如何实现多线程并行执行多个任务?

    我是线程编程的新手 我必须在并行和后台运行一些任务 以便主 UI 执行线程保持对用户操作的响应 并等待每一项任务完成 然后再继续进一步执行 就像是 foreach MyTask t in myTasks t DoSomethinginBac