Sobes.tech
Middle+

O que acontecerá se no AppDelegate na thread principal chamar 'dispatchQueue.main.sync'?

sobes.tech IA

Resposta da IA

Ocorre um Deadlock (bloqueio mútuo).

Explicação:

  1. AppDelegate funciona na thread principal.
  2. dispatchQueue.main.sync tenta executar código na thread principal de forma síncrona, ou seja, espera que o bloco de código termine.
  3. Mas a thread principal já está ocupada executando AppDelegate e espera que o bloco em sync termine.
  4. O bloco em sync não pode começar a ser executado porque a thread principal está ocupada esperando.

Resumindo, a thread principal espera que o bloco termine, e o bloco espera que a thread principal esteja livre — ocorre um deadlock. O aplicativo ficará congelado.

Exemplo de código que causará deadlock:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print("Aplicação iniciada")

    // Esta chamada causará deadlock
    DispatchQueue.main.sync {
        print("Este código nunca será executado")
    }

    print("Este código também não será atingido")

    return true
}