The interesting thing is that Task.Run is actually shorthand for :
Task.Factory.StartNew(() => Console.Writeline("Hello World!"),
CancellationToken.None,
TaskCreationOptions.DenyChildAttach,
TaskScheduler.Default);
You can see this within Microsoft's own source code here : https://github.com/microsoft/referencesource/blob/master/mscorlib/system/threading/Tasks/Task.cs#L5614
public static Task Run(Action action)
{
return Task.InternalStartNew(null, action, null, default(CancellationToken), TaskScheduler.Default,
TaskCreationOptions.DenyChildAttach, InternalTaskOptions.None, ref stackMark);
}
So essentially, you should be using Task.Run in 99% of cases. It sets up running Task.Factory.StartNew with the default parameters that will serve you well in almost all use cases.