c# - Execute two separate methods simultaneously -
i'm trying 2 execute 2 separate methods @ same time using backgroundworker (or if not possible using method) gain performance. idea heavy calculations in methods.
is possible @ all?
private readonly backgroundworker _worker = new backgroundworker(); private readonly backgroundworker _worker2 = new backgroundworker();  public mainwindow() {     initializecomponent();      _worker.workerreportsprogress = true;     _worker.workersupportscancellation = true;     _worker.dowork += worker_dowork;     _worker.runworkerasync();      _worker2.workerreportsprogress = true;     _worker2.workersupportscancellation = true;     _worker2.dowork += worker_dowork2;     _worker2.runworkerasync(); }  private void worker_dowork(object sender, doworkeventargs e) {     // }  private void worker_dowork2(object sender, doworkeventargs e) {     //  simultaneously worker_dorwork }      
yes, possible. lot of applications today consume multiple threads work in parallel. when doing such work, 1 has notice pitfalls too.
for example, if have shared resource consumed both workera , workerb, have synchronization synchronization primitive (such mutex, semaphore, manualresetevent, etc) fit scenario. 
also, note spinning new threads doesn't come free, there overheads each thread such 1mb stack each 1 created.
note, i'd advise more modern libraries doing parallel work such task parallel library introduced in .net 4.0. specifically, task , parallel classes.
edit
as per question in comments, lets see looks use task vs backgroundworker:
backgroundworker:
_worker.workerreportsprogress = true; _worker.workersupportscancellation = true; _worker.dowork += worker_dowork; _worker.runworkerasync();   task:
var task = task.run(worker_dowork);   or if you're on .net 4.0:
var task = task.factory.startnew(worker_dowork);   you benefits of cancellation, continuation, , use of async-await task unit, makes far easier parallel programming.
Comments
Post a Comment