2013-02-19 256 views
1

有什么办法可以将任务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的一部分。

回答

0

可能更容易把一个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 {...}; 
    } 
+0

但这样一来,我就不能得到什么功能'Run'返回。随着userState,它也返回一些其他的想法。 – 2013-02-19 09:16:59

+0

你可以,你只需要使用任务 - 更新我的初步反应,以反映这一点 – NDJ 2013-02-19 09:23:20

相关问题