Z punktu widzenia informatyki a Task
jest przyszłością lub obietnicą . (Niektórzy ludzie używają tych dwóch terminów synchronicznie, inni używają ich inaczej, nikt nie może zgodzić się na dokładną definicję.) Zasadniczo Task<T>
„obietnica” zwróci ci T
, ale nie teraz kochanie, jestem trochę zajęta, dlaczego nie wrócisz później?
To Thread
sposób na spełnienie tej obietnicy. Ale nie każdy Task
potrzebuje zupełnie nowego Thread
. (W rzeczywistości tworzenie wątku jest często niepożądane, ponieważ jest to znacznie droższe niż ponowne użycie istniejącego wątku z puli wątków. Więcej na ten temat za chwilę.) Jeśli wartość, na którą czekasz, pochodzi z systemu plików lub bazy danych lub sieci, nie ma potrzeby, aby wątek siedział i czekał na dane, gdy może obsługiwać inne żądania. Zamiast tego Task
może zarejestrować wywołanie zwrotne, aby otrzymać wartości, gdy będą gotowe.
W szczególności, Task
czy nie powiedzieć, dlaczego jest to, że zajmuje tak dużo czasu, aby zwrócić wartość. To może być tak, że to zajmuje dużo czasu, aby obliczyć, czy to może, że to zajmuje dużo czasu, aby pobrać. Tylko w pierwszym przypadku użyłbyś a Thread
do uruchomienia Task
. (W .NET wątki są cholernie drogie, więc na ogół chcesz ich unikać w jak największym stopniu i naprawdę używaj ich tylko wtedy, gdy chcesz uruchomić wiele ciężkich obliczeń na wielu procesorach. Na przykład w systemie Windows wątek waży 12 KiByte ( Myślę, że) w Linuksie wątek waży zaledwie 4 KiByte, w Erlang / BEAM nawet zaledwie 400 bajtów. W .NET to 1 MiByte!)