C#中的消防方法
我提到“火灾和遗忘在C#”的不同问题
即。 Simplest way to do a fire and forget method in C#? 。 。 几个,
但我有另一个问题,相同的。我写了下面的代码
static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
//fireAway(i);
Task.Factory.StartNew(() => fireAway(i));
}
Console.WriteLine("Main Finished");
Console.Read();
}
public static void fireAway(int i)
{
System.Threading.Thread.Sleep(5000);
Console.WriteLine("FireAway" + i);
}
我期待输出,如
主要完成
FireAway0
FireAway1
FireAway2
FireAway3
FireAway4
但输出
主要完成
FireAway5
FireAway5
FireAway5
FireAway5
FireAway5
老实说,我是线程概念的新手,我需要帮助。我怎样才能达到预期的产量..?
答案 0 :(得分:1)
循环结束后启动线程。当循环结束时,i的值为5.在将其发送到StartNew(..)之前必须捕获i的值
for (int i = 0; i < 5; i++)
{
int tmp = i;
Task.Factory.StartNew(() => fireAway(tmp));
}
答案 1 :(得分:-1)
您应该将参数传递给您的方法,而不是使用i,因为该方法只有在您完成迭代后才会开始执行,请参阅here