给定一个Task
实例,如何判断是否已调用ContinueWith
?我想知道我是否是链中执行的最后一个任务。
Task task = Task.FromResult();
void SomeMethod(var x) {
task = task.ContinueWith(previous => {
if (task.ContinueWith is called) return;
// do something with x...
}
}
答案 0 :(得分:0)
如果你的意思是多重延续。可能的解决方案可能是这样的。
class Program
{
public class TaskState
{
public bool Ended { get; set; }
}
static void Main(string[] args)
{
var task = Task.FromResult("Stackoverflow");
var state = new TaskState();
task.ContinueWith((result, continuationState) =>
{
Console.WriteLine("in first");
}, state).ContinueWith((result, continuationState) =>
{
if (!state.Ended)
Console.WriteLine("in second");
state.Ended = true;
}, state).ContinueWith((result, continuationState) =>
{
if (!state.Ended)
Console.WriteLine("in third");
state.Ended = true;
}, state);
Console.ReadLine();
}
}
答案 1 :(得分:-1)
您可以在父级上声明一个静态变量(字典对象),并在触发任务时使用唯一键值更新它。您可以监视此静态变量以查看是否所有其他线程都已完成执行。