执行任务并行库后未执行的代码

本文关键字:执行 代码 并行 执行任务 | 更新日期: 2023-09-27 18:03:54

我有一个逻辑上的形式加载是使用并行库,这是工作良好。但是在执行任务之后,它没有打开表单。有人能帮忙吗?

private void Form1_Load(object sender, EventArgs e)
{
    Task[] tasks = new Task[3];
    var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
    dummyList.ForEach(d =>
    {
        tasks[d] =
        Task.Factory.StartNew(() =>
        {
            ProcessPage();
        }, CancellationToken.None, 
           TaskCreationOptions.None,
           TaskScheduler.FromCurrentSynchronizationContext());
    });
    Task.WaitAll(tasks);
    Form2 frm = new Form2();
    frm.Show();                           
}

执行任务并行库后未执行的代码

这很简单,你自己在死锁。

你指示任务运行在当前的同步上下文,这是你的UI线程,通过TaskScheduler.FromCurrentSynchronizationContext()。然后,在主线程上执行Wait,同步阻塞它。

相反,您可以异步等待:
private async void Form1_Load(object sender, EventArgs e)
{
    var tasks = dummyList.Select(() => Task.Run(() => ProcessPage());
    await Task.WhenAll(tasks);
    var form = new Form2();
    form.Show();
}

你的一个任务可能卡住了。由于您的WaitAll()

,在完成所有任务之前不会出现任何内容。