@@ -642,20 +642,55 @@ extension Query: Queryable {
642642 completion ( . failure( error) )
643643 return
644644 }
645+
646+ #if compiler(>=5.5.2) && canImport(_Concurrency)
647+ Task {
648+ var query = self
649+ . order ( [ . ascending( " objectId " ) ] )
650+ query. limit = limit ?? ParseConstants . batchLimit
651+ var results = [ ResultType] ( )
652+ var finished = false
653+ while !finished {
654+ do {
655+ let currentResults = try await query. findCommand ( ) . executeAsync ( options: options,
656+ callbackQueue: callbackQueue)
657+ results. append ( contentsOf: currentResults)
658+ if currentResults. count >= query. limit {
659+ guard let lastObjectId = results [ results. count - 1 ] . objectId else {
660+ throw ParseError ( code: . unknownError, message: " Last object should have an id. " )
661+ }
662+ query. where. add ( " objectId " > lastObjectId)
663+ } else {
664+ finished = true
665+ }
666+ } catch {
667+ let defaultError = ParseError ( code: . unknownError,
668+ message: error. localizedDescription)
669+ let parseError = error as? ParseError ?? defaultError
670+ callbackQueue. async {
671+ completion ( . failure( parseError) )
672+ }
673+ return
674+ }
675+ }
676+ let finalResults = results
677+ callbackQueue. async {
678+ completion ( . success( finalResults) )
679+ }
680+ }
681+ #else
682+ var query = self
683+ . order ( [ . ascending( " objectId " ) ] )
684+ query. limit = limit ?? ParseConstants . batchLimit
685+ var results = [ ResultType] ( )
686+ var finished = false
645687 let uuid = UUID ( )
646688 let queue = DispatchQueue ( label: " com.parse.findAll. \( uuid) " ,
647689 qos: . default,
648690 attributes: . concurrent,
649691 autoreleaseFrequency: . inherit,
650692 target: nil )
651693 queue. sync {
652-
653- var query = self
654- . order ( [ . ascending( " objectId " ) ] )
655- query. limit = limit ?? ParseConstants . batchLimit
656- var results = [ ResultType] ( )
657- var finished = false
658-
659694 while !finished {
660695 do {
661696 let currentResults = try query. findCommand ( ) . execute ( options: options)
@@ -683,6 +718,7 @@ extension Query: Queryable {
683718 completion ( . success( results) )
684719 }
685720 }
721+ #endif
686722 }
687723
688724 /**
0 commit comments