Improve my Task Loops
I don't know if you can, depending on your real world needs... but if you can convert the TaskItems Dictionary to a List of KeyValuePairs like this...

public List&lt;KeyValuePair&lt;string, Item&gt;&gt; TaskItems = new List&lt;KeyValuePair&lt;string, Item&gt;&gt;
{
    new KeyValuePair&lt;string, Item&gt;( "ItemA", new Item() {} ),
    new KeyValuePair&lt;string, Item&gt;( "ItemB", new Item() {} ), 
    new KeyValuePair&lt;string, Item&gt;( "ItemC", new Item() {} ), 
};


Then you can use the ForEach() exstension method to reduce the loop code to...

if (this.RunPerItem) 
{
    TaskItems.ForEach(I =&gt; Tasks.ForEach(T =&gt; T(this, I.Value)));            
}
else if (this.RunPerTask)
{
    Tasks.ForEach(T =&gt; TaskItems.ForEach(I =&gt; T(this, I.Value)));
}


If you couple that with @Steven Jueris' idea of splitting them into their own methods, your code will be very clean.