@@ -198,7 +198,7 @@ public actor AsyncLimitBuffer<Element: Sendable>: AsyncBuffer {
198
198
}
199
199
}
200
200
201
- extension AsyncSequence where Element: Sendable {
201
+ extension AsyncSequence where Element: Sendable , Self : Sendable {
202
202
/// Creates an asynchronous sequence that buffers elements using a buffer created from a supplied closure.
203
203
///
204
204
/// Use the `buffer(_:)` method to account for `AsyncSequence` types that may produce elements faster
@@ -224,7 +224,7 @@ extension AsyncSequence where Element: Sendable {
224
224
}
225
225
226
226
/// An `AsyncSequence` that buffers elements utilizing an `AsyncBuffer`.
227
- public struct AsyncBufferSequence < Base: AsyncSequence , Buffer: AsyncBuffer > where Base. Element == Buffer . Input , Base . AsyncIterator : Sendable {
227
+ public struct AsyncBufferSequence < Base: AsyncSequence & Sendable , Buffer: AsyncBuffer > where Base. Element == Buffer . Input {
228
228
let base : Base
229
229
let createBuffer : @Sendable ( ) -> Buffer
230
230
@@ -246,11 +246,11 @@ extension AsyncBufferSequence: AsyncSequence {
246
246
let buffer : Buffer
247
247
let state : AsyncBufferState < Buffer . Input , Buffer . Output >
248
248
249
- init ( _ iterator : Base . AsyncIterator , buffer: Buffer , state: AsyncBufferState < Buffer . Input , Buffer . Output > ) {
249
+ init ( _ base : Base , buffer: Buffer , state: AsyncBufferState < Buffer . Input , Buffer . Output > ) {
250
250
self . buffer = buffer
251
251
self . state = state
252
252
task = Task {
253
- var iter = iterator
253
+ var iter = base . makeAsyncIterator ( )
254
254
do {
255
255
while let item = try await iter. next ( ) {
256
256
await state. enqueue ( item, buffer: buffer)
@@ -279,21 +279,21 @@ extension AsyncBufferSequence: AsyncSequence {
279
279
}
280
280
281
281
enum State {
282
- case idle( Base . AsyncIterator , @Sendable ( ) -> Buffer )
282
+ case idle( Base , @Sendable ( ) -> Buffer )
283
283
case active( Active )
284
284
}
285
285
286
286
var state : State
287
287
288
- init ( _ iterator : Base . AsyncIterator , createBuffer: @Sendable @escaping ( ) -> Buffer ) {
289
- state = . idle( iterator , createBuffer)
288
+ init ( _ base : Base , createBuffer: @Sendable @escaping ( ) -> Buffer ) {
289
+ state = . idle( base , createBuffer)
290
290
}
291
291
292
292
public mutating func next( ) async rethrows -> Element ? {
293
293
switch state {
294
- case . idle( let iterator , let createBuffer) :
294
+ case . idle( let base , let createBuffer) :
295
295
let bufferState = AsyncBufferState < Base . Element , Buffer . Output > ( )
296
- let buffer = Active ( iterator , buffer: createBuffer ( ) , state: bufferState)
296
+ let buffer = Active ( base , buffer: createBuffer ( ) , state: bufferState)
297
297
state = . active( buffer)
298
298
return try await buffer. next ( )
299
299
case . active( let buffer) :
@@ -303,6 +303,6 @@ extension AsyncBufferSequence: AsyncSequence {
303
303
}
304
304
305
305
public func makeAsyncIterator( ) -> Iterator {
306
- Iterator ( base. makeAsyncIterator ( ) , createBuffer: createBuffer)
306
+ Iterator ( base, createBuffer: createBuffer)
307
307
}
308
308
}
0 commit comments