AFAIK, tutto ciò che sa è che ad un certo punto, il suo SetResult
o SetException
metodo viene chiamato per completare l' Task<T>
esposizione attraverso la sua Task
proprietà.
In altre parole, funge da produttore per Task<TResult>
ae il suo completamento.
Ho visto qui l'esempio:
Se ho bisogno di un modo per eseguire un Func in modo asincrono e avere un'attività per rappresentare quell'operazione.
public static Task<T> RunAsync<T>(Func<T> function)
{
if (function == null) throw new ArgumentNullException(“function”);
var tcs = new TaskCompletionSource<T>();
ThreadPool.QueueUserWorkItem(_ =>
{
try
{
T result = function();
tcs.SetResult(result);
}
catch(Exception exc) { tcs.SetException(exc); }
});
return tcs.Task;
}
Quale potrebbe essere usato * se non avessi Task.Factory.StartNew
- Ma ce l' ho Task.Factory.StartNew
.
Domanda:
Qualcuno può spiegare con l'esempio uno scenario correlato direttamente alla TaskCompletionSource
e non ad una ipotetica situazione in cui non ho Task.Factory.StartNew
?