¿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;
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta