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