# async.thread (Compartilhado)

> Roda uma função numa thread async nova, na hora. A chamada retorna quando a função termina ou faz a primeira pausa, como `async.wait`.

- **Plataforma**: MY Multiplayer (MYMP)
- **Tipo**: Função Lua
- **Lado**: Compartilhado
- **Categoria**: Tempo e assíncrono
- **URL**: https://wiki.mymp.gg/pt/async.thread

## Sintaxe

```lua
any async.thread(function func [, function callback = nil])
```

## Parâmetros

| Nome | Tipo | Descrição |
| --- | --- | --- |
| `func` | `function` | Função que roda na thread. |
| `callback` | `function` | Chamada com os valores que `func` devolveu, quando ela termina sem erro. *(padrão: `nil`)* |

## Retorno

A thread (uma corrotina do Lua), para usar com `async.cancel` e `async.status`.

Um erro dentro da thread é registrado no log com o rastro da pilha. As threads de um recurso acabam quando ele para.

## Exemplo

```lua
async.thread(function()
    for i = 3, 1, -1 do
        outputDebugString("começando em " .. i)
        async.wait(1000)
    end
    return "vai"
end, function(result)
    outputDebugString(result)
end)
```

## Veja também

- [async.wait (Compartilhado)](https://wiki.mymp.gg/pt/async.wait.md): Pausa a thread async atual por ms milissegundos. O resto do jogo continua rodando.
- [async.mutex (Compartilhado)](https://wiki.mymp.gg/pt/async.mutex.md): Roda uma função numa thread async nova, como async.thread, mas não começa enquanto outra thread iniciada pela mesma linha do código, com a mesma key, ainda está rodando.
- [async.cancel (Compartilhado)](https://wiki.mymp.gg/pt/async.cancel.md): Para uma thread async deste recurso. Uma thread pausada é encerrada na hora; chamada na própria thread, ela para ali mesmo.
- [async.status (Compartilhado)](https://wiki.mymp.gg/pt/async.status.md): Diz em que estado está uma thread async deste recurso.
