小编Chr*_*old的帖子

在ContinueWith块内等待的意外行为

我有一个稍微复杂的要求,即并行执行某些任务,并且必须等待其中一些任务完成才能继续.现在,我遇到了意想不到的行为,当我有许多任务时,我想要并行执行,但在ContinueWith处理程序中.我掀起了一个小样本来说明问题:

var task1 = Task.Factory.StartNew(() =>
{
    Console.WriteLine("11");
    Thread.Sleep(1000);
    Console.WriteLine("12");
}).ContinueWith(async t =>
{
    Console.WriteLine("13");
    var innerTasks = new List<Task>();
    for (var i = 0; i < 10; i++)
    {
        var j = i;
        innerTasks.Add(Task.Factory.StartNew(() =>
        {
            Console.WriteLine("1_" + j + "_1");
            Thread.Sleep(500);
            Console.WriteLine("1_" + j + "_2");
        }));
    }
    await Task.WhenAll(innerTasks.ToArray());
    //Task.WaitAll(innerTasks.ToArray());
    Thread.Sleep(1000);
    Console.WriteLine("14");
});
var task2 = Task.Factory.StartNew(() =>
{
    Console.WriteLine("21");
    Thread.Sleep(1000);
    Console.WriteLine("22");
}).ContinueWith(t =>
{
    Console.WriteLine("23");
    Thread.Sleep(1000);
    Console.WriteLine("24");
});
Console.WriteLine("1");
await Task.WhenAll(task1, task2);
Console.WriteLine("2");
Run Code Online (Sandbox Code Playgroud)

基本模式是: - 任务1应与任务2并行执行. …

c# multithreading asynchronous async-await

5
推荐指数
1
解决办法
968
查看次数

标签 统计

async-await ×1

asynchronous ×1

c# ×1

multithreading ×1