任务并行库执行后代码未执行
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();
}
您的某个任务可能卡住了。由于您的WaitAll()
,在所有任务完成之前不会出现任何内容
很简单,你在给自己套路。
您正在通过 TaskScheduler.FromCurrentSynchronizationContext()
在当前同步上下文(即您的 UI 线程)上向 运行 指示任务。
然后,你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();
}
我有一个使用并行库的表单加载逻辑,工作正常。但在执行任务后它没有打开表格。有人可以帮忙吗?
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();
}
您的某个任务可能卡住了。由于您的WaitAll()
很简单,你在给自己套路。
您正在通过 TaskScheduler.FromCurrentSynchronizationContext()
在当前同步上下文(即您的 UI 线程)上向 运行 指示任务。
然后,你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();
}