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
}

现在我的问题是我将如何将任务 IDRun作为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 回答