执行任务并行库后未执行的代码
本文关键字:执行 代码 并行 执行任务 | 更新日期: 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()