gpt4 book ai didi

c# - 如果没有对任务的引用,任务是否会被垃圾收集中断?

转载 作者:行者123 更新时间:2023-11-30 21:34:19 27 4
gpt4 key购买 nike

在这里进行健全性检查。假设我开始了一项任务,但我没有等待它,也没有存储对它的引用。换句话说,我只是运行:

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 类保留一个私有(private)静态集合,其中包含对所有当前正在运行的任务的引用,因此即使您的任何代码都没有引用它,那也是。此外,任务都持有表示其延续的任务的引用,因此也无法收集任何表示来自正在运行的任务的延续(通过任意数量的间接层)的任务。

关于c# - 如果没有对任务的引用,任务是否会被垃圾收集中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50377253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com