2

呼び出し元の関数にタスク 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

4

1 に答える 1

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 {...};
    }
于 2013-02-19T09:03:40.463 に答える