2013-02-19 178 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

相關問題