Qual é o objetivo de TaskCreationOptions com um TaskCompletionSource?

Há algo pouco claro para mim sobre o funcionamento interno deTaskCompletionSource<>.

Ao criar um simplesTask<> usando oFactory, Espero que essa tarefa seja enfileirada em um conjunto de encadeamentos, a menos que eu especifiqueTaskCreationOptions.LongRunning, onde será executado em um novo segmento em vez disso.

Minha compreensão deTaskCompletionSource, é que sou responsável por acionar quando uma tarefa termina ou falha e tenho controle total sobre como gerenciar threads. No entanto, oTaskCompletionSource permite-me especificar umTaskCreationOptions, e isso me confunde, já que eu estava esperandoScheduler não ser capaz de lidar com a tarefa em si.

Qual é o propósito deTaskCreationOptions no contexto de umaTaskCompletionSource<>?

Aqui está um exemplo 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;
}

questionAnswers(1)

yourAnswerToTheQuestion