Quais métodos existem para colocar tarefas na fila do Grand Central Dispatch (GCD)?
sobes.tech IA
Resposta da IA
Existem as seguintes formas de colocar tarefas na fila GCD:
-
Execução assíncrona (async): A tarefa é adicionada à fila, e a execução continua imediatamente no thread atual, sem esperar que a tarefa na fila termine.
DispatchQueue.global().async { // Código da tarefa } -
Execução síncrona (sync): A tarefa é adicionada à fila, e o thread atual fica bloqueado até que a tarefa na fila seja concluída. Evite usar sync no thread principal para tarefas de longa duração para não bloquear a UI.
DispatchQueue.global().sync { // Código da tarefa, o thread atual aguardará } -
Execução adiada (asyncAfter): A tarefa é adicionada à fila com um atraso especificado. A execução começará não antes do tempo indicado.
DispatchQueue.global().asyncAfter(deadline: .now() + 2.0) { // O código da tarefa será executado após 2 segundos } -
Execução em grupo (DispatchGroup): As tarefas podem ser adicionadas a um DispatchGroup para sincronizar sua finalização. Pode-se esperar que todas terminem ou ser notificado (notify) após sua conclusão.
let group = DispatchGroup() group.enter() DispatchQueue.global().async { // Tarefa 1 group.leave() } group.enter() DispatchQueue.global().async { // Tarefa 2 group.leave() } group.notify(queue: .main) { // Todas as tarefas no grupo foram concluídas } -
Execução de iterações (concurrentPerform): Permite executar um bloco de código
iterationsvezes em paralelo em uma fila concorrente.DispatchQueue.concurrentPerform(iterations: 100) { index in // Código que será executado para cada índice em paralelo } -
DispatchWorkItem: Envolve um bloco de código e permite cancelar a tarefa antes de ela começar ou após adicioná-la à fila, se ela ainda não tiver iniciado.
var workItem: DispatchWorkItem? workItem = DispatchWorkItem { // Código da tarefa } DispatchQueue.global().async(execute: workItem!) // Pode cancelar a tarefa se ela ainda não tiver começado // workItem?.cancel()