Sobes.tech
Junior — Middle

Môžu sa asynchrónne procesy vykonávať súčasne bez fronty?

sobes.tech AI

Odpoveď od AI

Asynchrónne procesy v C# môžu byť vykonávané súčasne, ak sú dostupné zdroje, napríklad viacero vlákien alebo jadier procesora. Asynchrónnosť sama o sebe nezaručuje sekvenčné vykonávanie vo fronte — umožňuje neblokovať volajúce vlákno a operácie môžu začať paralelne.

Napríklad, ak spustíte viac asynchrónnych úloh bez čakania na ich dokončenie za sebou, môžu byť vykonávané súčasne:

async Task Example()
{
    var task1 = Task.Run(() => DoWork(1));
    var task2 = Task.Run(() => DoWork(2));
    await Task.WhenAll(task1, task2);
}

void DoWork(int id)
{
    Console.WriteLine($"Práca {id} začala");
    Thread.Sleep(1000);
    Console.WriteLine($"Práca {id} skončila");
}

Tu sa úlohy vykonávajú paralelne, bez fronty. Avšak, ak používate `await sekvenčne, napríklad:

await DoWorkAsync(1);
await DoWorkAsync(2);

druhá úloha začne až po dokončení prvej, čím vznikne fronta.

Preto môžu byť asynchrónne procesy vykonávané súčasne, ak sú spustené paralelne a systém to umožňuje.