Need to understand the relation between ManualResetEvent and thread


please me understand below code

what resetevent.set() , waitone() ? ?

var resetevent = new manualresetevent(false);  threadpool.queueuserworkitem(      arg =>       {          dowork();          resetevent.set();      });  resetevent.waitone();

again me understand below code

var events = new list<manualresetevent>();    foreach(var job in jobs)  {         var resetevent = new manualresetevent(false);      threadpool.queueuserworkitem(          arg =>          {              dowork(job);              resetevent.set();          });      events.add(resetevent);  }  waithandle.waitall(events.toarray());

why line waithandle.waitall(events.toarray()); required ?

why adding manualresetevent instance list ?

looking discussion. thanks

waitone() cause current (main) thread wait until thread pool thread has called set() method. if don't call waitone() method, code line below threadpool.queueuserworkitem(...) executed before delegate pass threadpool.queueuserworkitem method has finished execution because threads being executed simultaneously:

 var resetevent = new manualresetevent(false);              threadpool.queueuserworkitem(                 arg =>                 {                     //this executed simultaneously on thread b                     thread.sleep(10000);                      //tell thread continue                     resetevent.set();                 });              //thread waits here until thread b calls set() method...             resetevent.waitone();              string s = "abc"; //this line won't executed until thread b has called set() method provided waitone() method called thread above. 

>>why line waithandle.waitall(events.toarray()); required ?

it causes main thread wait until set method of manualresetevent objects in events list has been called. othwerwise execution of main thread continue after foreach loop has been executed. time dowork method of jobs has not yet been completed because being executed on thread.

waithandle.waitall(events.toarray());  string s = "abc"; //this line won't executed until set() method of manualresetevent objects in events has been called 

>>why adding manualresetevent instance list ?

because (appearantly) want wait objects in list, i.e. want wait dowork method to complete jobs before continue execution of main thread (and go on assign string s value "abc" in above example).

hope helps.

please remember close threads marking helpful posts answer start new thread if have new question. please don't ask several questions in same thread.



Visual Studio Languages  ,  .NET Framework  >  Visual C#



Comments

Popular posts from this blog

Azure DocumentDB Owner resource does not exist

job syspolicy_purge_history job fail in sqlserver 2008

Trying to register with public marketplace error with 'Get-AzureStackStampInformation'