Sobes.tech
Junior — Middle

Чӣ гуна механизмии интизорӣ барои анҷоми вазифаҳо дар дохили гурӯҳи сӯрохиҳо амалӣ мешавад?

sobes.tech AI

Ҷавоб аз AI

Дар C# механизмии интизорӣ барои анҷоми вазифаҳо дар дохили пули сӯрохҳо одатан бо истифода аз синф Task ва усулҳои ҳамоҳангсозӣ, монанди Task.Wait(), Task.WaitAll() ё Task.WhenAll() амалӣ карда мешавад.

Вақте вазифаҳо тавассути Task.Run ё ThreadPool.QueueUserWorkItem дар дохили пули сӯрохҳо оғоз меёбанд, метавон онҳоро интизор шуд, ки бо даъвати:

Task[] tasks = new Task[3];
tasks[0] = Task.Run(() => { /* кор */ });
tasks[1] = Task.Run(() => { /* кор */ });
tasks[2] = Task.Run(() => { /* кор */ });

// интизорӣ барои анҷоми ҳамаи вазифаҳо
Task.WaitAll(tasks);

Агар мустақиман ThreadPool истифода шавад, метавон ManualResetEvent ё CountdownEvent-ро барои интизорӣ истифода бурд:

CountdownEvent countdown = new CountdownEvent(3);

for (int i = 0; i < 3; i++)
{
    ThreadPool.QueueUserWorkItem(_ => {
        // кор
        countdown.Signal(); // кам кардани ҳисоббарор
    });
}

// интизор шудан барои анҷоми ҳамаи вазифаҳо
countdown.Wait();

Инчунин, механизмии интизорӣ ба ҳамоҳангсозии сӯрохҳо ва истифодаи усулҳо ва синфҳои махсус барои бастани сӯрохии ҳозира то анҷоми ҳамаи вазифаҳои оғозшуда асос ёфтааст.