Przekaż każdy element listy do nowego wątku jeden po drugim [duplikat]
To pytanie ma już tutaj odpowiedź:
Przechwycona zmienna w pętli w C # 8 odpowiedziTo, co staram się zrobić, jest bardzo proste,
Skanuję listę ciągów, a następnie przekazuję każdy ciąg do nowego wątku w celu wydrukowania.
using System;
using System.Collections.Generic;
using System.Threading;
namespace MultithreadingSynchronization
{
class Program
{
static void Main(string[] args)
{
List<string> stringList = new List<string> { "server1", "server2", "server3", "server4", "server5", "server6", "server7", "server8", "server9"};
foreach (string server in stringList)
{
ThreadStart work = delegate { Threadjob(server); };
new Thread(work).Start();
//Thread.Sleep(10); // 10 ms delay of main thread
}
}
public static void Threadjob(object server)
{
Console.WriteLine(server);
}
}
}
Z jakiegoś powodu istnieją wątki, które otrzymały niewłaściwą wartość, dlatego wyjście prezentuje kilka zduplikowanych łańcuchów, a także brakuje niektórych ciągów.
Spodziewam się tego wyjścia (kolejność nie jest ważna):
server1
server2
server3
server4
server5
server6
server7
server8
server9
Ale czasami to rozumiem:
server3
server2
server5
server5
server7
server4
server8
server9
server9
a czasem to rozumiem:
server2
server2
server4
server3
server6
server7
server7
server8
server9
itp.
rzeczywiście, jeśli po każdym utworzeniu wątku spóźnię się, otrzymam to, czego oczekuję.
Dowolny pomysł?