【发布时间】:2015-07-27 11:05:13
【问题描述】:
我有一个 Windows 服务(用 C# 编写),它使用任务并行库 dll 来执行一些并行任务(一次 5 个任务) 在任务执行一次后,我想持续(每小时)重复相同的任务。调用 QueuePeek 方法 我是否像在下面的代码 sn-p 中设置的那样使用计时器或计数器?
我正在使用计数器来设置任务,一旦达到 5 我退出循环,但我也使用 .ContinueWith 来减少计数器,所以我的想法是计数器值会低于 5 因此循环会继续。但是我的 ContinueWith 似乎正在主线程上执行,然后循环退出。 使用 ContinueWith 调用 DecrementCounter 似乎不起作用
仅供参考:Importer 类是使用 MEF 加载一些库并完成工作
这是我的代码示例:
private void QueuePeek()
{
var list = SetUpJobs();
while (taskCounter < 5)
{
int j = taskCounter;
Task task = null;
task = new Task(() =>
{
DoLoad(j);
});
taskCounter += 1;
tasks[j] = task;
task.ContinueWith((t) => DecrementTaskCounter());
task.Start();
ds.SetJobStatus(1);
}
if (taskCounter == 0)
Console.WriteLine("Completed all tasks.");
}
private void DoLoad(int i)
{
ILoader loader;
DataService.DataService ds = new DataService.DataService();
Dictionary<int, dynamic> results = ds.AssignRequest(i);
var data = results.Where(x => x.Key == 2).First();
int loaderId = (int)data.Value;
Importer imp = new Importer();
loader = imp.Run(GetLoaderType(loaderId));
LoaderProcessor lp = new LoaderProcessor(loader);
lp.ExecuteLoader();
}
private void DecrementTaskCounter()
{
Console.WriteLine(string.Format("Decrementing task counter with threadId: {0}",Thread.CurrentThread.ManagedThreadId) );
taskCounter--;
}
【问题讨论】:
标签: c# multithreading windows-services task-parallel-library