Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果没有对任务的引用,任务是否会被垃圾收集中断?_C#_.net_Async Await_Task - Fatal编程技术网

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

C# 如果没有对任务的引用,任务是否会被垃圾收集中断?,c#,.net,async-await,task,C#,.net,Async Await,Task,在这里检查是否正常。假设我启动了一个任务,但我没有等待它,也没有存储对它的引用。换句话说,我只是跑: 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.

在这里检查是否正常。假设我启动了一个任务,但我没有等待它,也没有存储对它的引用。换句话说,我只是跑:

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();
}
显然,如果不保留对
performlong operation()
返回的
任务的引用,我无法知道它是否以及何时完成。但是假设在某些情况下这是不必要的


垃圾收集是否存在注意到正在运行的任务没有引用的危险,并将其取消和清理?

否。
任务
类保留一个私有静态收集,其中引用了当前正在运行的所有任务,因此,即使您的代码中没有一个包含对它的引用,也会发生这种情况。此外,所有任务都保留代表其连续性的任务引用,因此也无法从正在运行的任务中收集代表连续性的任何任务(通过任意数量的间接层)。

task类没有此类错误。您不能假设它总是完成的,因为您不能确保它没有在未处理的异常中死亡。或者你让你的程序运行足够长的时间以允许它完成。那么子任务(附加和不附加到父任务)呢?@JohnyL这是一个延续,我在回答中提到过。一个任务需要有一个对其所有延续的引用,以便它可以告诉它们在完成后运行。请问,延续任务和子任务是一样的吗?@JohnyL如果你不是指延续,那么你需要更具体地说明你所指的是什么。