Реализация пользовательской асинхронной последовательности в Swift

Представьте, что я хочу создать функцию, которая по заданному массиву чисел вычисляет квадрат, куб и четвертую степень каждого числа асинхронным способом и возвращает сглаженную асинхронную последовательность всех этих результатов.

Так, например, для входного массива[2, 3, 4], он должен вернутьAsyncSequenceэкземпляр, дающий элементы[4, 8, 16, 9, 27, 81, 16, 64, 256].

Тогда скажем, вместо вычисленияx^2, x^3, x^4, я хотел бы, чтобы он вычислялx, x^2, x^3, ..., x^kгдеkявляется своего рода случайным целым числом, которое может быть различным для каждого x и заранее неизвестно (его значение становится известным только при вычислении степеней). Как бы я реализовал такой шаблон?

1 ответ

АнAsyncStreamмог сделать работу. Например, если задан массив целых чисел,values, асинхронная последовательность будет такой:

      let stream = AsyncStream<Int> { continuation in
    Task.detached {
        for value in values {
            var result = value
            for _ in 1 ..< n {
                result *= value
                continuation.yield(result)
            }
        }

        continuation.finish()
    }
}

Но это вычисление x², x³, ..., xⁿ для каждого элемента входного массива может не подходить для асинхронной последовательности. Каждое последующее значение может быть вычислено почти мгновенно (просто умножив ранее выданное значение на x ) и, как таковое, вероятно, должно быть просто стандартной синхронной последовательностью.

Как правило, асинхронные последовательности должны быть достаточно медленными, чтобы оправдать их перемещение в фоновый режим или иным образом иметь результаты, которые выдаются асинхронно с течением времени.

Другие вопросы по тегам