Jaki jest cel TaskCreationOptions z TaskCompletionSource?
Jest coś dla mnie niejasnego na temat wewnętrznego działaniaTaskCompletionSource<>
.
Podczas tworzenia prostegoTask<>
używającFactory
, Oczekuję, że to zadanie zostanie umieszczone w puli wątków, chyba że podamTaskCreationOptions.LongRunning
, gdzie zamiast tego będzie działał w nowym wątku.
Moje zrozumienieTaskCompletionSource
, jest to, że jestem odpowiedzialny za uruchamianie, gdy zadanie się kończy lub kończy się niepowodzeniem i mam pełną kontrolę nad tym, jak zarządzać wątkami. Jednak ctor ofTaskCompletionSource
pozwala mi określić aTaskCreationOptions
i to mnie wprawia w zakłopotanie, ponieważ oczekiwałemScheduler
nie jest w stanie samodzielnie wykonać zadania.
Jaki jest celTaskCreationOptions
w kontekście aTaskCompletionSource<>
?
Oto przykład użycia:
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;
}