首页 > 解决方案 > 顺序启动任务,但异步

问题描述

我希望有人可以帮助我解决这个问题。我需要读取大量文件,但不希望 UI 同时冻结。我的想法是读取一个文件。让用户使用它做一些工作,同时加载其余文件。问题是虽然我使用了 async 和 await,但该方法执行的是同步的。

下面是部分代码:

// Make two tasks, and start the first task
Task task1 = Task.Run(() => controller.LoadExcelSheet(date, firstLasXFile));
Task task2 = new Task(() => controller.LoadExcelFiles(date, fileListLASEX));
// Do something

// Await that the first task ends until the next task starts
await task1.ContinueWith(secondTask => task2.Start());

// Do something else
await task2;

// Do some final stuff

标签: asynchronousasync-awaittask

解决方案


您永远不应该使用Task构造函数,并且几乎永远不要使用ContinueWith.

如果您需要组合两种方法,那么正确的方法是使用另一种方法。在这种情况下,它可以是本地方法:

Task task1 = Task.Run(() => controller.LoadExcelSheet(date, firstLasXFile));
Task task2 = LoadExcelFilesAfterTask();

... // Do something

// Await that the first task ends
await task1;

... // Do something else

await task2;

... // Do some final stuff

async Task LoadExcelFilesAfterTask()
{
  await task1;
  await Task.Run(() => controller.LoadExcelFiles(date, fileListLASEX));
}

推荐阅读