Асинхронный анализ данных с ограничением параллелизма

C# Сложный async

Задача «Асинхронный анализ данных с ограничением параллелизма»

Разработайте асинхронное консольное приложение, которое читает из stdin число N, затем N строк, каждая строка содержит целое число. Приложение должно обработать каждое число с помощью асинхронной функции SimulateWorkAsync(int value), которая имитирует задержку (value мс) и возвращает квадрат числа. Необходимо ограничить максимальное количество одновременно выполняемых задач до 3. Вывести результаты в порядке завершения задач (не в порядке ввода). Если какая-либо задача завершилась с исключением (например, при value < 0), приложение должно дождаться завершения всех задач и вывести "Error" и завершиться. Используйте SemaphoreSlim для управления параллелизмом.

Формат ввода

Первая строка — целое число N (1 ≤ N ≤ 100). Затем N строк, каждая содержит целое число от -10 до 10.

Формат вывода

Для каждого успешного результата выведите квадрат числа на отдельной строке в порядке завершения задач. Если возникла ошибка, выведите только "Error".

Примеры

Пример 1

ВВОД
2 5 2
ВЫВОД
4 25

Пример 2

ВВОД
2 https://httpbin.org/status/200 https://httpbin.org/status/404 5000
ВЫВОД
Error

Пример 3

ВВОД
2 -1 4
ВЫВОД
Error
main.cs