我试图使用并行任务库揭开序幕像这样的一些任务:并行任务的建议
var workTasks = _schedules.Where(x => x.Task.Enabled);
_tasks = new Task[workTasks.Count()];
_cancellationTokenSource = new CancellationTokenSource();
_cancellationTokenSource.Token.ThrowIfCancellationRequested();
int i = 0;
foreach (var schedule in _schedules.Where(x => x.Task.Enabled))
{
_log.InfoFormat("Reading task information for task {0}", schedule.Task.Name);
if(!schedule.Task.Enabled)
{
_log.InfoFormat("task {0} disabled.", schedule.Task.Name);
i++;
continue;
}
schedule.Task.ServiceStarted = true;
_tasks[i] = Task.Factory.StartNew(() =>
schedule.Task.Run()
, _cancellationTokenSource.Token);
i++;
_log.InfoFormat("task {0} has been added to the worker threads and has been started.", schedule.Task.Name);
}
我想这些任务睡觉,然后醒来每隔5分钟,做自己的东西,在我的日程安排对象,它的运行方法,使用了Thread.Sleep的时刻是传递到StartNew作为这样一个变量的操作:
_tasks[i] = Task.Factory.StartNew(() =>
schedule.Task.Run()
, _cancellationTokenSource.Token);
我听说了Thread.Sleep是一个不好解决这个。任何人都可以推荐更好的方法?
您可以指定TaskCreationOptions.LongRunning,创建一个新的线程,而不是使用线程池的任务。 – 2012-08-20 09:37:15