Sobes.tech
Junior — Middle

Jaký je rozdíl mezi vláknem (thread) a úkolem (task) v kontextu asynchronního programování?

sobes.tech AI

Odpověď od AI

V kontextu C# a asynchronního programování je vlákno (thread) systémovým objektem operačního systému, který spouští kód paralelně s jinými vlákny. Vlákna jsou řízena plánovačem OS a mají vlastní zásobník a kontext vykonávání.

Task je abstrakce poskytovaná .NETem pro pohodlné řízení asynchronních operací. Task nemusí nutně odpovídat samostatnému vláknu; může využívat existující vlákno z poolu nebo vůbec nevytvářet nové, pokud je operace asynchronní (například vstup/výstup).

Hlavní rozdíly:

  • Vlákno je nízkoúrovňový mechanismus paralelismu.
  • Task je vysokourovňová obálka pro asynchronní operace, která usnadňuje správu a složení.
  • Task umožňuje psát asynchronní kód pomocí async/await, aniž by bylo nutné se přímo starat o vlákna.

Příklad použití Task:

async Task<int> GetDataAsync()
{
    // Asynchronní operace, která nezablokuje vlákno
    await Task.Delay(1000);
    return 42;
}