我想对我没有做过的代码做一些澄清,并且必须在服务中进行修改。
以下是服务代码的一些部分
private Thread _thread;
private ConcurrentQueue<Task> _tasks = new ConcurrentQueue<Task>();
private Task _runningTask = null;
protected override void OnStart(string[] args)
{
_thread = new Thread(WorkerThreadFunc);
_thread.IsBackground = true;
_thread.Start();
}
private void WorkerThreadFunc()
{
InitDb();
while (!_shutdownEvent.WaitOne(1000))
{
if (_runningTask == null || _runningTask.IsCompleted)
{
Task task;
if (_tasks.TryDequeue(out task))
{
_runningTask = task;
_runningTask.Start();
}
}
}
}
private void RunReport(int reportID)
{
var task = new Task(id =>
{
//Task code
}, reportID);
_tasks.Enqueue(task);
}
所以,这一切都运作良好
问题是,我想将其他任务添加到任务队列中,但我没有任何ID来提供它们(代码中的任务运行报告并使用reportID,但其他任务不是特别是与一份报告相关联)。
有没有办法创建一个任务而不给它一个ID(我怀疑),还是有些东西我完全失踪了?
答案 0 :(得分:3)
有没有办法创建一个任务而不给它一个ID(我怀疑),还是有些东西我完全失踪了?
是的,只需使用:
_tasks.Enqueue(new Task(() => {
// Your code here
});
话虽如此,这不是Task
类的习惯用法。通常,Task
和Task<T>
类应始终运行 - 不会创建并在以后启动。
答案 1 :(得分:2)
我知道这不是你的代码,但是,就像Reed所说,你不应该排队Task
。您应该改为对工作项进行排队。