asynchronous - 顺序启动任务,但异步
问题描述
我希望有人可以帮助我解决这个问题。我需要读取大量文件,但不希望 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
解决方案
您永远不应该使用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));
}
推荐阅读
- python - 如何在 z3 中通过 GADT 重载运算符?
- ios - UIviewcontroller 和 UIwindow 有什么区别?
- javascript - 如何在 javascript Promise 链中使用循环
- testing - 如何动态更改 JMeter 汇总报告中的行标签?
- flutter - 有弹性的标题效果
- database - 如何防止用户在 PostgreSQL 中修改模式
- javascript - 用户滚动时列表中的项目更改位置
- reporting-services - 在 SSRS 中的条形图上对类别进行分组
- reactjs - 未捕获的错误:只能在函数组件的主体内调用挂钩
- python - 对数组执行 argsort 操作时出现 IndexError