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