给定一个Task实例,我可以判断是否已经调用了ContinueWith吗?

时间:2015-06-20 04:10:39

标签: c# .net task-parallel-library

给定一个Task实例,如何判断是否已调用ContinueWith?我想知道我是否是链中执行的最后一个任务。

Task task = Task.FromResult();
void SomeMethod(var x) {
   task = task.ContinueWith(previous => {
       if (task.ContinueWith is called) return;
       // do something with x...
   }
}

2 个答案:

答案 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)

您可以在父级上声明一个静态变量(字典对象),并在触发任务时使用唯一键值更新它。您可以监视此静态变量以查看是否所有其他线程都已完成执行。