Running 2 sets of tasks at the same time
When I have to manage multiple threads, I make sure all processing is complete, typically by using WaitAll.

List&lt;Task&gt; tasks = new List&lt;Task&gt;();
tasks.Add(Task.Run(() =&gt; { TriggerAccess(); }));
tasks.Add(Task.Run(() =&gt; { TriggerSQL(); }));
Task.WaitAll(tasks.ToArray());


This also allows me to use methods in a non-threaded capacity for testing and to easily add additional threads when the need arises. I can then also return actual data from a method, if I need to, instead of just a thread.

The difference between running the method in a thread and having the method be an async thread is that an async method waits until the first await statement to return to the main thread for processing whereas threading the method immediately continues to the next statement in the main method.

http://blogs.msdn.com/b/pfxteam/archive/2011/10/24/10229468.aspx and http://msdn.microsoft.com/en-us/library/hh156513.aspx are very helpful for me.