La mia classe ha un metodo che produce un oggetto Task<int>
utilizzando un TaskCompletionSource<int>
. Quindi esegue alcune operazioni asincrone e imposta il risultato. Ho bisogno di sapere se posso fidarmi metodo del task ContinueWith
o no:Come annullare la continuazione di un'attività?
public Task<int> CalculateAsync()
{
var source = new TaskCompletionSource();
DoSomeAsyncStuffAndSetResultOf(source);
source.Task.ContinueWith(t => Console.WriteLine("Is this reliable?"));
return source.Task;
}
Può il chiamante del metodo CalculateAsync
fare qualcosa con il compito prodotto e impedire la sua prosecuzione da corsa?
Oh, capisco - no, la continuazione verrà sempre eseguita (supponendo che il chiamante non possa forzare l'attività semplicemente in esecuzione per sempre, senza mai completare). –
Eliminato il commento dopo aver visto la tua modifica. Cosa succede se chiama Dispose prima di impostare il risultato dell'attività? –
@ ŞafakGür: Come per i documenti per Task.Dispose, questo genererà un'eccezione InvalidOperationException. –