c# – 与Task.ContinueWith使用异步回调

我正在尝试用C#的异步/等待/连续播放。
我的目标是要有两个并行运行的任务,尽管哪个任务正在执行一系列的动作。
为了做到这一点,我计划有一个列表<任务>代表并行运行的2个(或多个)任务,并在每个Task上使用ContinueWith
我的问题是,在等待taskList已经返回时,继续的回调似乎没有被执行。

为了总结一下,下面是一个示例来说明我期望发生的事情:

class Program
{
    static public async Task Test()
    {
        System.Console.WriteLine("Enter Test");
        await Task.Delay(100);
        System.Console.WriteLine("Leave Test");
    }

    static void Main(string[] args)
    {
        Test().ContinueWith(
        async (task) =>
        {
            System.Console.WriteLine("Enter callback");
            await Task.Delay(1000);
            System.Console.WriteLine("Leave callback");
        },
        TaskContinuationOptions.AttachedToParent).Wait();
        Console.WriteLine("Done with test");
    }
}

预期的产出是

Enter Test
Leave Test
Enter callback
Leave callback
Done with test

但是,输出是

Enter Test
Leave Test
Enter callback
Done with test

是否有一种方法可以让继承者调用的任务等待提供的函数在被考虑完成之前完成?即将等待两个任务完成,原来的任务和由ContinueWith返回的任务

当使用ContinueWith方法链接多个任务时,您的返回类型将是Task< T>而T是传递给ContinueWith的委托/方法的返回类型。

由于异步委托的返回类型是“任务”,因此您将得到“任务”任务。最后等待异步委托返回您在第一次等待之后完成的任务。

为了纠正这种情况,您需要使用返回的任务,嵌入到任务<任务>中。使用Unwrap扩展方法来提取它。

代码日志版权声明:
翻译自:http://stackoverflow.com/questions/18697167/use-an-async-callback-with-task-continuewith

转载注明原文:c# – 与Task.ContinueWith使用异步回调