public static Task RunAsync(Action action, ThreadTaskPriority priority = ThreadTaskPriority.Normal, bool singleConcurrencyRun = false) { if (IsShuttingDown) { return(null); } return(Task.Factory.StartNew(action, CancellationToken.None, TaskCreationOptions.None, getScheduler(priority, singleConcurrencyRun))); }
public static Task <TResult> RunAsync <TResult>(Func <TResult> func, Action <Task <TResult> > CallBack = null, ThreadTaskPriority priority = ThreadTaskPriority.Normal, bool singleConcurrencyRun = false) { if (IsShuttingDown) { return(null); } Task <TResult> t = Task.Factory.StartNew(func, CancellationToken.None, TaskCreationOptions.None, getScheduler(priority, singleConcurrencyRun)); if (CallBack != null) { t.ContinueWith(CallBack); } return(t); }
private static TaskScheduler getScheduler(ThreadTaskPriority priority, bool singleConcurrencyRun) { if (singleConcurrencyRun) { return(_monoConcurrencyTaskSheduler); } switch (priority) { case ThreadTaskPriority.High: return(_highPrioritySchedduler); case ThreadTaskPriority.Normal: return(_normalPrioritySchedduler); case ThreadTaskPriority.Low: return(_lowPrioritySchedduler); default: return(_normalPrioritySchedduler); } }