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?