Powiel możliwe:
C# Captured Variable In LoopConfused o wielowątkowości w pętli dla C#
Jestem całkiem nowy, wielowątkowości programowania. Kiedy uruchomiłem poniższy kod i tylko ostatnie dziecko zostało wykonane. Czy ktoś może mi powiedzieć, co się stało? Dziękuję bardzo.
private void Process()
{
Dictionary<int, int> dataDict = new Dictionary<int, int>();
dataDict.Add(1, 2000);
dataDict.Add(2, 1000);
dataDict.Add(3, 4000);
dataDict.Add(4, 3000);
foreach (KeyValuePair<int, int> kvp in dataDict)
{
Console.WriteLine("Ready for [" + kvp.Key.ToString() + "]");
Task.Factory.StartNew(() => DoSomething(kvp.Value, kvp.Key));
}
private static void DoSomething(int waitTime, int childID)
{
{
Console.WriteLine("Start task [" + childID.ToString() + "]");
Thread.Sleep(waitTime);
Console.WriteLine("End task [" + childID.ToString() + "]");
}
}
Wyjście
Ready for [1]
Ready for [2]
Ready for [3]
Ready for [4]
Start task [4]
Start task [4]
Start task [4]
Start task [4]
End task [4]
End task [4]
End task [4]
End task [4]
Ya, aplikacja konsolowa. – Dreteh