创建手动线程 - 但获得重复线程

2023-12-01

问题:获取重复的项目,即创建的线程数量多于数组大小...... 大家好,我正在为数组的每个元素循环创建线程。真正的用途是使用亚马逊ses发送一批消息。消息存储在 messageamazonRequestBatch 中,循环运行该批处理并发送消息。

这是代码:

Thread thrdSendEmail;
            try
            {
                string amazonMessageID = string.Empty;
                List<Thread> lstThread = new List<Thread>();
                foreach (int n in arrMessageid)
                {
                    thrdSendEmail = new Thread(() =>
                    {
                            try
                            {
                                amazonMessageID = SendSimpleEmail_Part2(messageAmazonRequestBatch.ElementAt(n).req);
                                messageAmazonRequestBatch.ElementAt(n).msg.AmazonMessageID = amazonMessageID;
                                logManager_MessageLogwithAmazonmsgID.LogMessage(",\t" + n , true);
                                //logManager_MessageLogwithAmazonmsgID.LogMessage(",\t" + n + ",\t" + messageAmazonRequestBatch.ElementAt(n).msg.QueueMessageId + ",\t" + amazonMessageID, true);
                            }
                            catch (Exception ex) { logManager_RunSummary.LogMessage(ex.Message, true); }                                
                    });
                    thrdSendEmail.Name = n.ToString();
                    lstThread.Add(thrdSendEmail);
                    thrdSendEmail.Start();
                    //logManager_MessageLogwithAmazonmsgID.LogMessage(",\t" + n, true);
                }
                foreach (Thread t in lstThread)
                {
                    t.Join();
                    //logManager_MessageLogwithAmazonmsgID.LogMessage(",\t" + t.Name, true);
                }
            }
            catch (Exception ex)
            {
                logManager_RunSummary.LogMessage(ex.Message, true);
            }

我也尝试过parallel.foreach 和 asynch 以及await 选项...它们也给出了重复项。我知道锁会解决问题,但在我的情况下,锁会使性能降低 10 倍.. 也就是说我的性能下降了 10 倍... 因为将 sendemail 登录放入锁中会阻塞,直到我得到返回的 amazonmessageid来自亚马逊...

对此的任何帮助将不胜感激。我不是新手程序员,但对线程很陌生......


您的 lambda 表达式正在捕获循环变量n,所以当你的 lambda 执行时,n已经改变了;你需要复制n到循环内的局部变量。 (假设您使用的是 C# 4 或更早版本;C# 5 解决了该问题)。

另一个问题是所有线程都使用相同的amazonMessageID多变的;您应该在 lambda 表达式中声明它。

            foreach (int n in arrMessageid)
            {
                int n2 = n;
                thrdSendEmail = new Thread(() =>
                {
                        try
                        {
                            string amazonMessageID = SendSimpleEmail_Part2(messageAmazonRequestBatch.ElementAt(n2).req);
                            messageAmazonRequestBatch.ElementAt(n2).msg.AmazonMessageID = amazonMessageID;
                            logManager_MessageLogwithAmazonmsgID.LogMessage(",\t" + n2 , true);
                            //logManager_MessageLogwithAmazonmsgID.LogMessage(",\t" + n2 + ",\t" + messageAmazonRequestBatch.ElementAt(n2).msg.QueueMessageId + ",\t" + amazonMessageID, true);
                        }
                        catch (Exception ex) { logManager_RunSummary.LogMessage(ex.Message, true); }                                
                });
 ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建手动线程 - 但获得重复线程 的相关文章

  • 更新面板工作速度非常慢

    我正在编写一个用户可以注册的应用程序 注册时 可以选择多个选项 并根据这些注册字段可见或不可见以及是否必需 我想出了一个想法 所有字段都将位于 updatePanel 中 当用户更改注册选项时 我将在服务器端设置这些字段的可见性 它可以工作
  • Exit() 时是否调用基本对象析构函数?

    我意识到这个问题已经出现过几次 但我试图获得上述问题的明确答案 但我不断遇到相互矛盾的信息 我需要知道的是 当我使用 exit 时 基本类对象是否被破坏 我知道需要删除动态内存 但我的意思更像是 include
  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • 如何在类文件中使用 Url.Action() ?

    如何在 MVC 项目的类文件中使用 Url Action Like namespace 3harf public class myFunction public static void CheckUserAdminPanelPermissi
  • 现代 C++ 编译器是否能够在某些情况下避免调用 const 函数两次?

    例如 如果我有以下代码 class SomeDataProcessor public bool calc const SomeData d1 const SomeData d2 const private Some non mutable
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • 已发布的 .Net Core 应用程序警告安装 .Net Core,但它已安装

    我制作了一个 WPF 和控制台应用程序 供某人在我无法访问的私人服务器上使用 我使用 Visual Studio 2019 的内置 发布向导 来创建依赖于框架的单文件应用程序 当该人打开 WPF 应用程序时 他们会看到标准警告 他们单击 是
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 无法将字符串文字分配给装箱的 std::string 向量

    这是我的类型系统的简化版本 include
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的

随机推荐

  • 如何很好地处理[:-0]切片?

    在实现自相关函数时 我有一个像这样的术语 for k in range start N c k np sum f k f k N k 现在一切正常如果start 1但我想很好地处理开始0没有条件的情况 显然它不起作用 因为f 0 f 0 并
  • Linux 内核中哪里可以找到 TCP 数据(HTTP 下)?

    我正在尝试使用Linux内核中的TCP从HTTP流中读取数据 我能够从中获取大部分数据skb buff here 但是 如果服务器在没有请求的情况下将数据推送到客户端 则数据不会复制到用户空间 这样我就找不到它了 使用 Wireshark
  • 自定义订单排序

    您好 我想根据值 关键 高 中 低 对整个 C 列进行排序 我正在启用宏的工作表上运行此代码 这是我的代码 Sub run Range C C Sort Key1 Range C1 SortOn xlSortOnValues Order x
  • 如何在SSIS控制流任务中创建临时表,然后在数据流任务中使用它?

    我有一个控制流 我在其中使用 T SQL 命令创建临时数据库和表 当我添加数据流时 我想查询该表 但我不能 因为该表不存在可从中获取信息 当我尝试时 我收到有关登录的错误 因为数据库尚不存在 我有延迟验证为真 如果我手动创建数据库和表 然后
  • 使用mysqli_stmt_bind_result时在哪一行检查取数据是否成功?

    我需要向网站访问者表明 如果他对我的数据库进行查询在技术上失败 就会出现问题 想要让 php 代码回显 抱歉 出了问题 如果由于某种原因数据获取失败 以下是我试图实现这一目标的一些方法 3 个样品 它们会导致无休止的循环 从而使我的浏览器崩
  • 使用 Windows.Web.Http.HttpClient 类修补异步请求

    我需要做一个PATCH请求与Windows Web Http HttpClient类 并且没有关于如何执行此操作的官方文档 我怎样才能做到这一点 我找到了如何进行 定制 PATCH与上一个请求System Net Http HttpClie
  • 如何在更改属性后在设计时刷新 winform 自定义控件

    假设我创建了一个嵌入轨迹栏的自定义控件 我还为自定义控件创建了方向属性 当我将自定义控件放在窗体上时 默认情况下它将是水平的 然后我将其设置为垂直 轨迹栏应在设计时刷新为垂直 怎么办呢 我想你应该打电话Refresh 更改值后 public
  • Django cors 标头和服务器错误

    我正在尝试使用 django cors headers 将 COR 添加到我的服务器 但是当我加载页面时 我在服务器上收到此错误 ImproperlyConfigured Error importing module corsheaders
  • jqGrid 没有数据 - 如何设置更突出的“无数据”消息?

    默认情况下 当没有数据时 jqGrid显示消息 No records to view 在寻呼机内 我的网格使用顶部寻呼机 问题是 该消息很容易被错过 我想让网格在顶部标题下方显示消息 如果有任何数据 则在行显示的同一位置 在里面体层 如定义
  • 如何在heroku上为django应用程序安装ffmpeg?

    我想使用 ffmpeg 从视频中提取帧以将其用作海报 这是我第一次部署应用程序 更不用说在heroku上 所以我不知道如何在服务器上安装ffmpeg 我发现了这个 ffmpeg 版本并附有将其 供应商 到我的应用程序中的说明 然后调整我的应
  • Node.js 从网络获取图像并使用 Base64 进行编码

    我正在尝试从网络获取图像并使用 base64 对其进行编码 到目前为止我所拥有的是这样的 var request require request var BufferList require bufferlist BufferList bl
  • java arraylist 对所有元素求和

    如果我有 ArrayList
  • 属性“Id”是对象关键信息的一部分,无法修改

    我正在使用 Entity Framework 4 0 并且有一个我无法弄清楚的愚蠢问题 我有两张桌子 Contact Id 主键 Value ContactTypeId ContactType 的外键 联系人类型 ID 主键 类型 家庭 手
  • 如何使用 apps-script 覆盖内容超过 10MB 的文件?

    我有一个驱动器文件夹 其中有一些 g sheet 文件 每个文件都大于 100MB 我想用最新文件的内容覆盖最旧文件的内容 然后删除除最旧的文件之外的所有文件 我有两个问题 文件 代码 中出现异常 我的内容可能大于 10MB 难道是死路一条
  • Yii2 框架 facebook 和 google 使用 authclient 登录不起作用

    我已按照此处的说明进行操作http www yiiframework com doc 2 0 yii authclient authaction html 它对我不起作用 我正在使用 yii2 authclient 进行社交网站 faceb
  • 在电子表格的应用程序脚本中选择连续范围

    是否可以获取特定单元格周围的范围 类似于电子表格中的 Ctrl A 我有许多电子表格 其中的表格是由QUERY 功能 因此边界是灵活的 过去 我采用设置命名范围的方法 这些命名范围的大小是我预期的 QUERY 结果所需的最大大小 并将这些命
  • 如何在VS2008中针对3.5的项目中引用framework 4.0 dll

    我有一个使用 4 0 框架在 VS2010 中创建的 dll 是的 它是完整的 4 0 而不是客户端配置文件 我想在 VS2008 项目中引用它 这意味着即使我愿意 我也无法将引用项目重新定位到 4 0 并且无法将该项目升级到 VS2010
  • 编译,对于android 6.0,adb为“device-on-target”

    由于某种原因 在 android 6 0 上 device on target 的 adb 构建已从 Android mk 中删除 实际上 这非常有用 您可以看到 6 0 mk 和 5 0 mk 之间的差异 6 0 米克 https git
  • 用 lme4 数据绘制两个连续变量的交互作用

    我正在尝试绘制 R 中两个连续变量之间的交互作用 但是 我的数据是多级的 人们在几天内嵌套 因此在绘制图表时我需要考虑数据的嵌套结构 我使用 lme4 库分析数据以解释嵌套结构 但我很难弄清楚如何绘制它的图表 example data sp
  • 创建手动线程 - 但获得重复线程

    问题 获取重复的项目 即创建的线程数量多于数组大小 大家好 我正在为数组的每个元素循环创建线程 真正的用途是使用亚马逊ses发送一批消息 消息存储在 messageamazonRequestBatch 中 循环运行该批处理并发送消息 这是代