繁体   English   中英

Task Parallel库执行后代码未执行

[英]Code not executing after Task Parallel library executes

我在使用并行库的表单加载逻辑上工作得很好。 但是执行任务后,它不会打开表单。 有人可以帮忙吗?

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线程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()在所有任务完成之前,什么都不会出现

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM