AFAIK, todo lo que sabe es que en algún momento, es SetResult
oSetException
método está siendo llamado para completar el Task<T>
expuestos a través de su Task
propiedad.
En otras palabras, actúa como el productor de un Task<TResult>
ay su finalización.
Vi aqui el ejemplo:
Si necesito una forma de ejecutar un Func de forma asincrónica y tengo una Tarea para representar esa operación.
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;
}
Que podría usarse * si no tuviera Task.Factory.StartNew
... Pero sí tengo Task.Factory.StartNew
.
Pregunta:
Por favor alguien puede explicar por ejemplo, un escenario relacionado directamente a TaskCompletionSource
y no a una hipotética situación en la que no tengo Task.Factory.StartNew
?