Bri*_*Rak 5 .net c# task async-await
在这里检查完整性。假设我开始了一项任务,但我不等待它,也不存储对它的引用。换句话说,我只是运行:
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();
}
Run Code Online (Sandbox Code Playgroud)
显然,如果不保留对Task返回的引用PerformLongOperation(),我无法知道它是否以及何时完成。但是假设在某些情况下这不是必需的。
垃圾收集是否有任何危险,注意到没有引用它的任务正在运行,然后取消它并清理它?
不会。该类Task保留一个私有静态集合,其中包含对所有当前正在运行的任务的引用,因此即使您的任何代码都没有引用它,也会如此。此外,任务都保留代表其延续的任务的引用,因此也无法收集来自正在运行的任务的代表延续(通过任意数量的间接层)的任何任务。
| 归档时间: |
|
| 查看次数: |
345 次 |
| 最近记录: |