C# · Avançado · Inglês · Técnico
TaskCompletionSource
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); // 42Exemplos
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