c# - 任务并行库执行后代码不执行

标签 c# asp.net parallel-processing async-await task-parallel-library

我有一个使用并行库的表单加载逻辑,工作正常。但执行任务后,它没有打开表单。有人可以帮忙吗?

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();                           
}

最佳答案

很简单,你自己陷入了僵局。

您通过 TaskScheduler.FromCurrentSynchronizationContext() 指示任务在当前同步上下文(即您的 UI 线程)上运行。 然后,您在主线程上等待,同步阻塞它。

相反,您可以异步等待:

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();
}

关于c# - 任务并行库执行后代码不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31561265/

相关文章:

c - OpenMP 循环对同一个串行循环给出不同的结果

c# - 使用 TableAdapter 插入后返回不正确的 ID

c# - 为什么 CaSTLe Windsor 试图将我的 'Content' 和 'Scripts' 文件夹解析为 Controller ?

c# - 使用 TransactSQL 将字节数组转换为字符串

asp.net - 为每个用户创建专用 URL (ASP .net)

windows - Windows XP 上 R 中的多核处理 - 通过 doMC 和 foreach

c# 流布局标签卡住了

asp.net - sql server 数据库设计

asp.net - 如何将 <br/> 添加到 asp.net 占位符

python - 如何执行一个不为序列中的每个项目并行返回任何内容的操作?