Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Having 1 thread execute multiple methods at the same time

So I have a list with 900+ entries in C#. For every entry in the list a method has to be executed, though these must go all at the same time. First I thought of doing this:

public void InitializeThread()
{
   Thread myThread = new Thread(run());
   myThread.Start();
}

public void run()
{
   foreach(Object o in ObjectList)
   {
      othermethod();
   }
}

Now the problem here is that this will execute 1 method at a time for each entry in the list. But I want every single one of them to be running at the same time.

Then I tried making a seperate thread for each entry like this:

public void InitializeThread()
{
   foreach(Object o in ObjectList)
   {
      Thread myThread = new Thread(run());
      myThread.Start();
   }
}

public void run()
{
   while(//thread is allowed to run)
   {
      // do stuff
   } 
} 

But this seems to give me system.outofmemory exceptions (not a suprise since the list has almost a 1000 entries. Is there a way to succesfully run all those methods at the same time? Either using multiple threads or only one?

What I'm ultimately trying to achieve is this: I have a GMap, and want to have a few markers on it. These markers represent trains. The marker pops up on the GMap at a certain point in time, and dissappears when it reaches it's destination. All the trains move about at the same time on the map.

If I need to post more of the code I tried please let me know. Thanks in advance!

like image 334
KlaasKluizenaar Avatar asked Jul 03 '26 12:07

KlaasKluizenaar


1 Answers

What you're looking for is Parallel.ForEach:

Executes a foreach operation on an IEnumerable in which iterations may run in parallel.

And you use it like this:

Parallel.ForEach(ObjectList, (obj) =>
{
   // Do parallel work here on each object
});
like image 73
Yuval Itzchakov Avatar answered Jul 05 '26 00:07

Yuval Itzchakov