将Task实例传递给任务的委托

Gaz*_*yer 4 c# callback task task-parallel-library

我有一个长期运行的任务,它使用回调来递增地提供数据(而不是最后一个ContinueWith()回调).

我希望能够在此回调中传递Task对象以进行任务识别(使用Task.CurrentId)

但是,我无法弄清楚如何将Task对象传递给任务委托.似乎没有超载来执行此操作,并且我无法使用闭包来执行此操作,因为此时未定义任务对象.

例如.

public Task StartDoingSomeStuff(CallbackDelegate callback)
{
    Task task = Task.Factory.StartNew(() =>
    {
         while(whatever)
         {
             var results = DoSomeStuff();
             callback(results, task); //CS0165. How do I get hold of the task?
         }
    });

    return task;
}
Run Code Online (Sandbox Code Playgroud)

得到:

错误CS0165:使用未分配的局部变量'task'

dtb*_*dtb 5

拆分声明变量并将任务分配给两个语句.确保在分配任务之前不使用变量:

public Task StartDoingSomeStuff(CallbackDelegate callback)
{
    var gate = new object();
    lock (gate)
    {
        Task task = null;
        task = Task.Factory.StartNew(() =>
        {
            lock (gate)
            {
                while (whatever)
                {
                    var results = DoSomeStuff();
                    callback(results, task);
                }
            }
        });
        return task;
    }
}
Run Code Online (Sandbox Code Playgroud)