C#中的fire and forget方法

时间:2016-03-22 12:32:57

标签: c# multithreading

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

老实说,我是线程概念的新手,我需要帮助。我怎样才能达到预期的产量..?

2 个答案:

答案 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