Esta es probablemente una pregunta bastante básica, pero es algo que quería asegurarme de tener en mente. Hoy estaba cavando con la biblioteca TPL y descubrí que hay dos formas de crear una instancia de la clase Tarea.Instancia de la clase Tarea (Task.Factory.StartNew o TaskCompletionSource)
manera I
Task<int> t1 = Task.Factory.StartNew(() =>
{
//Some code
return 100;
});
Camino II
TaskCompletionSource<int> task = new TaskCompletionSource<int>();
Task t2 = task.Task;
task.SetResult(100);
Ahora, sólo quería saber que
- ¿Hay alguna diferencia entre estos casos?
- En caso afirmativo, ¿qué?
Para agregar un poco más de detalle, TaskCompletionSource es una forma de ajustar las operaciones asincrónicas que de otro modo no son compatibles actualmente con cosas como TaskFactory.FromAsync. Un ejemplo de uso de TaskCompletionSource es envolver las implementaciones de patrones asíncronos basados en eventos como WebClient.DownloadStringAsync. Para obtener más ejemplos, consulte http://msdn.microsoft.com/en-us/magazine/ff959203.aspx –