。NET TaskCompletionSource任务何时有资格使用GC(不是root用户)?

问题描述 投票:1回答:1

我正在为一些异步代码编写实用程序类,并且我想确保不会在设计中造成内存泄漏。假设我有与下面的类类似执行的代码。 (显然,您不会编写像这样工作的代码,但是我有几个代码路径都汇聚成一个基础函数,而其中一个代码路径有效地做到了这一点)。代码中的关键点是,尽管[.NET]可能在做一些使它们扎根的伏都教,但my代码中没有任何内容可以引用TaskCompletionSource或其Task

假设Foo实例是根据需要创建的,并且没有永久地植根。 tcs.Task是否扎根?更重要的是,假设request从未完成,因此结果未设置。 tcs.Task会永远流连吗?那继续任务呢?或者,它们的生存期是否取决于Foo对象,并且当Foo实例进行GC编辑时它们会消失吗?

class Foo
{
    public void Bar(Action<Action<object>> request, Action<T> callback)
    {
        var tcs = new TaskCompletionSource<object>();
        request(result => tcs.SetResult(result));  // this runs asynchronously
        tcs.Task.ContinueWith(task => callback(task.Result));
    }
}

我正在为一些异步代码编写实用程序类,并且我想确保不会在设计中造成内存泄漏。假设我有与下面的类类似执行的代码。 (...

c# task task-parallel-library taskcompletionsource continuewith
1个回答
0
投票

假设Foo实例是根据需要创建的,而不是永久扎根。 tcs.Task是否已扎根?

© www.soinside.com 2019 - 2024. All rights reserved.