有没有办法将任务ID传递给调用函数?
问题描述:
有什么办法可以将任务ID传递给调用函数吗?有没有办法将任务ID传递给调用函数?
实际上,我有一个函数Run
在一个单独的文件中定义,它假设在完成时调用callback
函数。我想这个函数来工作不可知论者(即不希望使用Task.CurrentId它)
X.cs:
void Run(object userState)
{
.
.
.
callback(userState);
}
回调函数的目的是做清理任务在我的情况,即没有任务的参考我正在存储在任务池中。
Y.cs
void LaunchTask()
{
.
.
.
Task task = Task.Factory.StartNew(() => Run(???)); //How to pass Task ID here as an argument yo Run?
TaskPool[task.Id] = task;
}
void callback(object userState)
{
.
.
.
A a = (A)userState;
var taskID = a.ID;
TaskPool.Remove(taskID); //Free the reference of the task from the pool
}
现在我的问题是,如何我要任务ID传递给Run
功能的userState
的一部分。
答
可能更容易把一个continueWith原始任务例如为:
public void LaunchTask()
{
Task<MyType> t = Task.Factory.StartNew(() => Run());
t.ContinueWith(_ => CleanUpTask(t));
}
private void CleanUpTask(Task<MyType> task)
{
int id = task.Id;
MyType t = task.Result;
//cleanup
}
private MyType Run()
{
return new MyType {...};
}
但这样一来,我就不能得到什么功能'Run'返回。随着userState,它也返回一些其他的想法。 – 2013-02-19 09:16:59
你可以,你只需要使用任务 - 更新我的初步反应,以反映这一点 –
NDJ
2013-02-19 09:23:20