You can use tasks to run two loops in separate threads. Use regular foreach loops.
var t1 = Task.Factory.StartNew(() => { foreach(var a in list1) { //do some operations } }); var t2 = Task.Factory.StartNew(() => { foreach(var a in list1) { //do some operations } }); // This will block the thread until both tasks have completed Task.WaitAll(t1, t2);
source share