ExpertiDict

C# · Avançado · Inglês · Técnico

TaskCompletionSource

/tæsk kəmˈpliʃən sɔrs/substantivo

Objeto que cria uma Task controlada manualmente: você a entrega a quem espera e a conclui depois com SetResult, SetException ou SetCanceled. Útil para adaptar APIs baseadas em callback.

Onde usar

Aparece ao transformar eventos e callbacks em algo que dá para aguardar com await. Crie com TaskCreationOptions.RunContinuationsAsynchronously para que a conclusão não execute o código do consumidor dentro da sua thread.

Em código

var tcs = new TaskCompletionSource<int>(
  TaskCreationOptions
    .RunContinuationsAsynchronously);
_ = Task.Run(() => tcs.SetResult(42));
Console.WriteLine(await tcs.Task); // 42

Exemplos

We wrap the callback API with a TaskCompletionSource.

Envolvemos a API de callback com um TaskCompletionSource.

If nobody calls SetResult, the await hangs forever.

Se ninguém chamar SetResult, o await trava para sempre.

Cuidado

Não deixe o TaskCompletionSource sem concluir: quem fizer await nele espera para sempre.

Sinônimos

TCS

Veja também

Todos os termos de C#