gpt4 book ai didi

c# - 将任务实例传递给任务的委托(delegate)

转载 作者:太空狗 更新时间:2023-10-30 00:56:05 24 4
gpt4 key购买 nike

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

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

但是,我不知道如何将任务对象传递给任务委托(delegate)。似乎没有重载来执行此操作,而且我无法使用闭包来执行此操作,因为此时未定义任务对象。

例如。

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;
}

给出:

error CS0165: Use of unassigned local variable '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;
}
}

关于c# - 将任务实例传递给任务的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8574960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com