【发布时间】:2018-05-17 02:03:49
【问题描述】:
在这里进行完整性检查。假设我开始了一项任务,但我没有等待它,也没有存储对它的引用。换句话说,我只是运行:
async Task PerformLongOperation() {
await Task.Delay(10 * 1000);
Debug.WriteLine("All done!");
}
void DoSomething() {
// Kick off the operation and allow it to complete when it does.
PerformLongOperation();
}
显然,如果不保留对 PerformLongOperation() 返回的 Task 的引用,我无法知道它是否以及何时完成。但是假设在某些情况下这不是必需的。
垃圾收集是否会注意到任务在没有引用的情况下运行,然后取消并清理它?
【问题讨论】:
-
Task 类没有这样的错误。您不能假设它总是完成,因为您无法确保它不会因未处理的异常而死。或者您让程序运行足够长的时间以使其完成。
标签: c# .net async-await task