Run multiple prerequisite methods in parallel before continuing
Another option is Parallel.Invoke:

Dictionary&lt;string, string&gt; processOptions = null;
Dictionary&lt;string, string&gt; businessAreas = null;
Dictionary&lt;string, string&gt; requirementLevels = null;
List&lt;TemplateSection&gt; sections = null;
List&lt;TemplateVersion&gt; versions = null;


Parallel.Invoke(() =&gt; sections = GetSectionsInTreeForm(latestVersionGuid),
                () =&gt; versions = GetTemplateVersions(templateId),
                () =&gt; processOptions = GetOptionSetProcessPhaseTypes(),
                () =&gt; businessAreas = GetOptionSetBusinessAreaTypes(),
                () =&gt; requirementLevels = GetOptionSetRequirementLevelTypes());




It should be pointed out that these tasks run in threads from the thread pool (in both cases: Task and Parallel.Invoke). That's OK for few tasks with a run time from 2-5 seconds, but for long running tasks it is better to use a Task object with TaskCreationOptions.LongRunning to run the task in it's own thread. Otherwise the threadpool threads will be blocked for other short running tasks.

Tasks provide a more granular control but that is not required in your case so I would prefer the simpler Parallel.Invoke variant.