Em termos de ciência da computação, a Task
é um futuro ou uma promessa . (Algumas pessoas usam esses dois termos de maneira sinomizada, outros usam de maneira diferente, ninguém pode concordar com uma definição precisa .) Basicamente, uma Task<T>
"promessa" de devolver a você T
, mas não agora, querida, estou meio ocupada, por que não você volta mais tarde?
A Thread
é uma maneira de cumprir essa promessa. Mas nem todo mundo Task
precisa de um novinho em folha Thread
. (De fato, criar um encadeamento geralmente é indesejável, porque é muito mais caro do que reutilizar um encadeamento existente no conjunto de encadeamentos. Mais sobre isso daqui a pouco.) Se o valor que você está esperando for do sistema de arquivos ou de um banco de dados ou na rede, não há necessidade de um encadeamento ficar aguardando os dados quando ele pode atender a outras solicitações. Em vez disso, eles Task
podem registrar um retorno de chamada para receber o (s) valor (es) quando estiverem prontos.
Em particular, o Task
que não dizer por que é que leva um longo tempo para retornar o valor. Ele pode ser que ele leva muito tempo para calcular, ou pode que leva um longo tempo para buscar. Somente no primeiro caso você usaria a Thread
para executar a Task
. (No .NET, os threads são muito caros, então você geralmente deseja evitá-los o máximo possível e realmente usá-los apenas se desejar executar vários cálculos pesados em várias CPUs. Por exemplo, no Windows, um thread pesa 12 KiByte ( Eu acho que), no Linux, um thread pesa apenas 4 KiByte, em Erlang / BEAM até apenas 400 bytes. No .NET, é 1 MiByte!)