O que acontece com as tarefas que nunca são concluídas? Eles são descartados adequadamente?

Digamos que eu tenha a seguinte turma:

class SomeClass
{
    private TaskCompletionSource<string> _someTask;

    public Task<string> WaitForThing()
    {
        _someTask = new TaskCompletionSource<string>();
        return _someTask.Task;
    }

    //Other code which calls _someTask.SetResult(..);
}

Então, em outro lugar, eu chamo

//Some code..
await someClassInstance.WaitForThing();
//Some more code

o//Some more code não será chamado até_someTask.SetResult(..) é chamado. O contexto de chamada está esperando na memória em algum lugar.

No entanto, digamosSetResult(..) nunca é chamado esomeClassInstance deixa de ser referenciado e é coletado como lixo. Isso cria um vazamento de memória? Ou o .Net sabe automaticamente que o contexto de chamada precisa ser descartado?

questionAnswers(2)

yourAnswerToTheQuestion