¿Cuál es el propósito de TaskCreationOptions con una TaskCompletionSource?
Hay algo que no me queda claro sobre el funcionamiento interno deTaskCompletionSource<>
.
Al crear un simpleTask<>
utilizando laFactory
, Espero que esta tarea se ponga en cola en un grupo de subprocesos, a menos que especifiqueTaskCreationOptions.LongRunning
, donde se ejecutará en un nuevo hilo en su lugar.
Mi entendimiento deTaskCompletionSource
, es que soy responsable de desencadenar cuando una tarea termina o falla, y tengo control total sobre cómo administrar los subprocesos. Sin embargo, el ctor deTaskCompletionSource
me permite especificar unTaskCreationOptions
, y esto me confunde, ya que esperaba elScheduler
No poder manejar la tarea en sí.
Cual es el proposito deTaskCreationOptions
en el contexto de unTaskCompletionSource<>
?
Aquí hay un ejemplo de uso:
public Task<WebResponse> Download(string url)
{
TaskCompletionSource<WebResponse> tcs =
new TaskCompletionSource<WebResponse>(TaskCreationOptions.LongRunning);
var client = (HttpWebRequest)HttpWebRequest.Create(url);
var async = client.BeginGetResponse(o =>
{
try
{
WebResponse resp = client.EndGetResponse(o);
tcs.SetResult(resp);
}
catch (Exception ex)
{
tcs.SetException(ex);
}
}, null);
return tcs.Task;
}