Análise assíncrona de dados com limite de concorrência

C# Hard async

Tarefa «Análise assíncrona de dados com limite de concorrência»

Desenvolva um aplicativo de console assíncrono que lê da stdin um número N, depois N linhas, cada linha contendo um número inteiro. O aplicativo deve processar cada número usando a função assíncrona SimulateWorkAsync(int value), que simula um atraso (value ms) e retorna o quadrado do número. É necessário limitar o número máximo de tarefas executadas simultaneamente a 3. Exiba os resultados na ordem de conclusão das tarefas (não na ordem de entrada). Se alguma tarefa for concluída com exceção (por exemplo, quando value < 0), o aplicativo deve aguardar a conclusão de todas as tarefas, exibir "Error" e encerrar. Use SemaphoreSlim para gerenciar a concorrência.

Formato de Entrada

A primeira linha é um número inteiro N (1 ≤ N ≤ 100). Em seguida, N linhas, cada uma contendo um número inteiro de -10 a 10.

Formato de Saída

Para cada resultado bem-sucedido, exiba o quadrado do número em uma linha separada, na ordem de conclusão das tarefas. Se ocorrer um erro, exiba apenas "Error".

Exemplos

Exemplo 1

ENTRADA
2 5 2
SAÍDA
4 25

Exemplo 2

ENTRADA
2 https://httpbin.org/status/200 https://httpbin.org/status/404 5000
SAÍDA
Error

Exemplo 3

ENTRADA
2 -1 4
SAÍDA
Error
main.cs