为什么任务对象不使用传递给它的参数?

2023-11-25

我在用着Task并行处理多个请求并向每个任务传递不同的参数,但似乎所有任务都采用一个最终参数并使用该参数执行该方法。

下面是示例代码。我期望输出为:

0 1 2 3 4 5 6 ..99

但我得到:

100 100 100 ..10 。

可能在调用 print 方法之前,i的值已经是100但每个方法不应该打印传递给它的参数吗?为什么 print 方法会采用最终值i?

class Program
{
    static void Main(string[] args)
    {
        Task[]t = new Task[100];
        for (int i = 0; i < 100; i++)
        {
            t[i] = Task.Factory.StartNew(() => print(i));
        }
        Task.WaitAll(t);
        Console.WriteLine("complete");
        Console.ReadLine();
    }

    private static void print(object i)
    {

        Console.WriteLine((int)i);
    }
}

你是受害者closure。解决此问题的最简单方法是:

    for (int i = 0; i < 100; i++)
    {
        int v = i;
        t[i] = Task.Factory.StartNew(() => print(v));
    }

你可以找到更详细的解释here and here.

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

为什么任务对象不使用传递给它的参数? 的相关文章

  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • 使用post方法将多个参数发送到asp.net core 3 mvc操作

    使用 http post 方法向 asp net mvc core 3 操作发送具有多个参数的 ajax 请求时存在问题 参数不绑定 在 dot net 框架 asp net web api 中存在类似的限制 但在 asp net mvc
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • POCO HTTPSClientSession 发送请求时遇到问题 - 证书验证失败

    我正在尝试使用 POCO 库编写一个向服务器发出 HTTPS 请求的程序 出于测试目的 我正在连接到具有自签名证书的服务器 并且我希望允许客户端进行连接 为了允许这种情况发生 我尝试安装InvalidCertificateHandler这是
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • g++ 对于看似不相关的变量“警告:迭代...调用未定义的行为”

    考虑以下代码strange cpp include
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop

随机推荐

  • SKScene iPad 高度宽度反转

    我正在尝试在仅支持横向模式的 iPad 应用程序中用图块填充我的 SKScene 在场景中我检测到 h w 如下 int h UIScreen mainScreen bounds size height int w UIScreen mai
  • 如何为Asp.Net中的所有子文件夹注册HttpHandler?

    我想注册一个 HttpHandler 以包含根文件夹的所有子文件夹 无论它们嵌套的深度如何 我本希望下面的代码的行为能够做到这一点 但实际上它只包含直接位于根文件夹中的项目
  • 第 25 行出现错误 1030 (HY000):来自存储引擎的错误 168

    我正在尝试将 sql 导入到我的数据库中 我正在使用 Ubuntu 操作系统 这是一个错误 david david VirtualBox mysql u root p test project lt db sql Enter passwor
  • 如何验证 string.Format 方法的格式

    string Format 具有以下方法签名 string Format format params 我想每次都传递自定义格式 string custFormat Hi 0 n I only care about numbers here
  • 如何使用 Require.js 实现 TinyMCE?

    我目前正在将 TinyMCE 源作为依赖项传递 然后调用 tinyMCE init 但它没有初始化 TinyMCE 当我console log TinyMCE时 它返回一个TinyMCE对象 代码示例如下 define jQuery Und
  • 我有一个国家代码列表和一个语言代码列表。如何从国家/地区代码映射到语言代码?

    当用户访问该网站时 我可以获得他们的国家 地区代码 我想用它来设置默认语言 如果需要 他们可以稍后修改 只是根据他们所在的国家 地区对他们可能会说的语言进行一般猜测 是否存在从国家 地区代码到语言代码的明确映射 我找不到 我知道并非特定国家
  • 如何在MySQL数据库中存储.text文件?

    我可以将数据文件 例如txt文件 存储到MySql服务器吗 如果可以的话 如何保存它们 您可以使用LOAD DATA INFILE读取文件的内容并将其以结构化格式存储在数据库的表中 这比在客户端上读取和解析文件然后使用多个 INSERT 语
  • 如何使用选择器设置文本大小?

    我使用选择器 但不知道如何设置文本大小 也许我做错了什么 帮助 箭头 xml
  • Doxygen 在记录 PHP 时出现奇怪的问题 if

    当我尝试记录我的项目时 我遇到了一个奇怪的问题 我有以下代码 Set default action for called controller If no action is called default index will be set
  • REST JAX-RS javax.ws.rs.ProcessingException:

    每当我的 REST 客户端代码使用以下代码调用 REST 服务时 我都会遇到以下异常 Code public void putWatcher Watcher watcher System out println In REST Client
  • JRE系统库缺少tools.jar

    我正在使用 Ubuntu 12 04 LTS 在我的 Eclipse 项目中 我需要使用 com sun tools attach 包 但是 我的 JRE 系统库不包括包含该包的tools jar 文件 我尝试为 Java 6 和 7 安装
  • 如何将 IEnumerable 转换为 ObservableCollection?

    如何转换IEnumerable to ObservableCollection 根据MSDN var myObservableCollection new ObservableCollection
  • 使用 iText 7 获取 PDF 文件的创建日期

    我必须创建一个工具 将其创建日期添加到几个 pdf 文件名中 我想使用内部存储在 pdf 中的创建日期 为此我下载了 iText Community Edition 现在 我的代码是这样开始的 VB Module Module1 Sub M
  • Android 操作系统和 postgreSQL

    我们正在进行一个 Android 项目 但需要连接到我们在其他项目中使用的 postgreSQL 服务器 关于这个起点有什么建议吗 有什么东西 有偿或无偿 可以让我们实现这一目标吗 我意识到这是一个非常普遍的问题 尽管我们在编写桌面客户端
  • Primefaces 依赖 selectOneMenu 和 required="true"

    在我的应用程序中 我有三个下拉菜单 p selectOneMenu 说A B C 其中两个是相关的 说B和C 通过更改B的值 我动态地将值加载到C 还有一个文本框 当 on change 事件从这三个下拉列表中触发时 文本框的值由 ajax
  • 让 Xcode 忽略第 3 方项目中的 LLVM 构建警告

    我的 Xcode 工作区中有一个第三方项目 它是我的主项目的依赖项 并且我希望 Xcode 忽略来自该第三方项目的所有构建警告 最好我想忽略项目中 Vendor 组的所有构建警告 因为那是我放置所有第三方代码的地方 可能的 是的 这是可能的
  • mysqli 在 PHP 7.4 中支持 caching_sha2_password 吗?

    当我尝试从 PHP 7 3 升级到 PHP 7 4 时 收到以下错误 执行 caching sha2 auth 109 时出现意外的服务器响应 据我所知 这表明 PHP 7 4 MySQLi 正在尝试使用caching sha2 passw
  • typedef 和变量名

    忽略为什么我想这样做 只是想了解这里发生的事情 此代码编译 include
  • 使用backbone.js获取集合(所有模型)的总和

    我只是在学习骨干 我有以下内容 window ServerList Backbone Collection extend model Server cpuTotal function if this length return 0 NOT
  • 为什么任务对象不使用传递给它的参数?

    我在用着Task并行处理多个请求并向每个任务传递不同的参数 但似乎所有任务都采用一个最终参数并使用该参数执行该方法 下面是示例代码 我期望输出为 0 1 2 3 4 5 6 99 但我得到 100 100 100 10 可能在调用 prin