What I'm trying to do is very simple,
I scan a list of strings, then, I pass each string to a new thread for printing.
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);
}
}
}
From some reason, there are threads that received wrong value, therefore, the output presents some duplicated strings, and also miss some strings.
I'm expecting for this output (the order isn't important):
server1
server2
server3
server4
server5
server6
server7
server8
server9
But, sometimes I get this:
server3
server2
server5
server5
server7
server4
server8
server9
server9
and sometimes I get this:
server2
server2
server4
server3
server6
server7
server7
server8
server9
etc.
indeed, if I put a delay after each thread creating, I get what I expect to get.
Any idea?