gpt4 book ai didi

c# - 任务不改变参数

转载 作者:太空狗 更新时间:2023-10-30 00:32:36 24 4
gpt4 key购买 nike

我正在使用 Task 函数并发现一个非常奇怪的问题,我在 for 循环中运行 Task 并将参数传递给函数 (i) 循环计数为 100。正如我所料,输出会是这样的。
1
2
3
4
5
但是我从这个函数得到的输出是
100
100
100
我的意思是它不会更改为新参数。有关详细信息,我上传了整个项目。

Download Sample Program that I made!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
}

private void button1_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(() => button_tast());
}
void button_tast()
{
Task[] tk =new Task[100];
for (int i = 0; i < 100; i++)
{
tk[i] = Task.Factory.StartNew(() => taskThread(i));
}
Task.WaitAll(tk);
}
void taskThread(int i){
listBox1.Items.Add(i);
}
}
}

最佳答案

那是因为你是closing over the loop variable .您可以将循环重写为

for (int i = 0; i < 100; i++)
{
int taskNumber = i
tk[i] = Task.Factory.StartNew(() => taskThread(taskNumber));
}

你会没事的

关于c# - 任务不改变参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16651796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com