【发布时间】:2014-05-10 19:49:48
【问题描述】:
我的任务如下:
- 任务 taskInput 以获取数据到 inputQueue
- 任务 taskOutput 将数据从 inputQueue 抓取到 outputQueue
- 使用 outputQueue 中的数据的并行任务
我想运行符合条件的任务:
先运行 taskInput,再运行 taskOutput,最后运行 Consumer。
对应代码:
// Get data to inputQueue
Task taskInput = new Task(()=>AddingItemToInputQueue());
taskInput.Start();
// Grab data from inputQueue to outputQueue.
Task taskOutput = new Task(() => AddItemToOutputQueue());
taskOutput.Start();
// Parallel tasks for consume data from outputQueue
int threadCount = n;
Task[] workers = new Task[threadCount];
for (int i = 0; i < threadCount; ++i)
{
Task task=Task.Run(()=>Consumer(i));
workers[i] = task;
}
Task.WaitAll(workers);
关于inputQueue和outputQueue:
BlockingCollection<Messages> InputQueue = new BlockingCollection<Messages>();
BlockingCollection<Messages> OutputQueue = new BlockingCollection<Messages>();
我的问题:
- 安排任务。我以为我们可以使用 Task.ContinueWith Method bot 不确定如何将其应用于
Consumer。 - 我不确定它是否是线程安全的,因为在运行
Consumer时可能会将新项目添加到 inputQueue。
【问题讨论】:
-
Start后你用
taskInput和taskOutput吗? -
我不确定你的意思,但消费者会使用 outputQueue 中的数据。 outputQueue 中的数据来自 taskOutut。
-
我的意思是,如果您在启动
taskInput和taskOutput对象后使用它们。或者你开始对这些对象不做任何事情 -
我开始对这些对象什么都不做。
-
这是
C# 4.0问题还是C# 5.0问题?它看起来像一个C# 5.0问题,因为您使用的是Task.Run。在这种情况下,不要使用Task构造函数,只需使用Task.Run。
标签: .net c#-4.0 scheduled-tasks c#-5.0