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'
拆分声明变量并将任务分配给两个语句.确保在分配任务之前不使用变量:
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)