Skip to content

Commit 2a53ef4

Browse files
Remove performAndWait from delete tasks and also from next task.
1 parent ad46653 commit 2a53ef4

File tree

2 files changed

+30
-35
lines changed

2 files changed

+30
-35
lines changed

swift-sdk/Internal/IterableCoreDataPersistence.swift

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -130,16 +130,14 @@ struct CoreDataPersistenceContext: IterablePersistenceContext {
130130
}
131131

132132
func nextTask() throws -> IterableTask? {
133-
try performAndWait {
134-
let taskManagedObjects: [IterableTaskManagedObject] = try CoreDataUtil.findSortedEntities(context: managedObjectContext,
135-
entity: PersistenceConst.Entity.Task.name,
136-
column: PersistenceConst.Entity.Task.Column.scheduledAt,
137-
ascending: true,
138-
limit: 1)
139-
return taskManagedObjects.first.map(PersistenceHelper.task(from:))
140-
}
133+
let taskManagedObjects: [IterableTaskManagedObject] = try CoreDataUtil.findSortedEntities(context: managedObjectContext,
134+
entity: PersistenceConst.Entity.Task.name,
135+
column: PersistenceConst.Entity.Task.Column.scheduledAt,
136+
ascending: true,
137+
limit: 1)
138+
return taskManagedObjects.first.map(PersistenceHelper.task(from:))
141139
}
142-
140+
143141
func findTask(withId id: String) throws -> IterableTask? {
144142
guard let taskManagedObject = try findTaskManagedObject(id: id) else {
145143
return nil

swift-sdk/Internal/IterableTaskRunner.swift

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class IterableTaskRunner: NSObject {
4141

4242
func start() {
4343
ITBInfo()
44-
queue.async { [weak self] in
44+
persistenceContext.perform { [weak self] in
4545
self?.paused = false
4646
self?.connectivityManager.start()
4747
self?.run()
@@ -50,7 +50,7 @@ class IterableTaskRunner: NSObject {
5050

5151
func stop() {
5252
ITBInfo()
53-
queue.async { [weak self] in
53+
persistenceContext.perform { [weak self] in
5454
self?.paused = true
5555
self?.connectivityManager.stop()
5656
}
@@ -59,7 +59,7 @@ class IterableTaskRunner: NSObject {
5959
@objc
6060
private func onTaskScheduled(notification: Notification) {
6161
ITBInfo()
62-
queue.async { [weak self] in
62+
persistenceContext.perform { [weak self] in
6363
if self?.paused == false {
6464
self?.run()
6565
}
@@ -69,22 +69,22 @@ class IterableTaskRunner: NSObject {
6969
@objc
7070
private func onAppWillEnterForeground(notification _: Notification) {
7171
ITBInfo()
72-
queue.async { [weak self] in
72+
persistenceContext.perform { [weak self] in
7373
self?.start()
7474
}
7575
}
7676

7777
@objc
7878
private func onAppDidEnterBackground(notification _: Notification) {
7979
ITBInfo()
80-
queue.async { [weak self] in
80+
persistenceContext.perform { [weak self] in
8181
self?.stop()
8282
}
8383
}
8484

8585
private func onConnectivityChanged(connected: Bool) {
8686
ITBInfo()
87-
queue.async { [weak self] in
87+
persistenceContext.perform { [weak self] in
8888
if connected {
8989
if self?.paused == true {
9090
self?.paused = false
@@ -113,11 +113,7 @@ class IterableTaskRunner: NSObject {
113113

114114
workItem?.cancel()
115115

116-
persistenceContext.perform { [weak self] in
117-
self?.queue.async {
118-
self?.processTasks()
119-
}
120-
}
116+
processTasks()
121117
}
122118

123119
private func scheduleNext() {
@@ -130,11 +126,15 @@ class IterableTaskRunner: NSObject {
130126
running = false
131127

132128
workItem?.cancel()
129+
133130
let workItem = DispatchWorkItem { [weak self] in
134-
self?.run()
131+
self?.persistenceContext.perform {
132+
self?.run()
133+
}
135134
}
136135
self.workItem = workItem
137-
queue.asyncAfter(deadline: .now() + timeInterval, execute: workItem)
136+
137+
DispatchQueue.global().asyncAfter(deadline: .now() + timeInterval, execute: workItem)
138138
}
139139

140140
private func processTasks() {
@@ -160,7 +160,7 @@ class IterableTaskRunner: NSObject {
160160
guard let strongSelf = self else {
161161
return
162162
}
163-
strongSelf.queue.async {
163+
strongSelf.persistenceContext.perform {
164164
switch executionResult {
165165
case .success, .failure, .error:
166166
strongSelf.processTasks()
@@ -209,6 +209,7 @@ class IterableTaskRunner: NSObject {
209209
result.resolve(with: taskExecutionResult)
210210
}
211211
} receiveError: { [weak self] error in
212+
// TODO: test
212213
ITBError("task processing error: \(error.localizedDescription)")
213214
guard let strongSelf = self else {
214215
return
@@ -217,6 +218,7 @@ class IterableTaskRunner: NSObject {
217218
result.resolve(with: .failure)
218219
}
219220
} catch let error {
221+
// TODO: test
220222
ITBError("Error proessing task: \(task.id), message: \(error.localizedDescription)")
221223
deleteTask(task: task)
222224
result.resolve(with: .error)
@@ -229,7 +231,7 @@ class IterableTaskRunner: NSObject {
229231
ITBInfo()
230232
let fulfill = Fulfill<TaskExecutionResult, Never>()
231233

232-
queue.async { [weak self] in
234+
persistenceContext.perform { [weak self] in
233235
guard let strongSelf = self else {
234236
ITBError()
235237
return
@@ -277,16 +279,12 @@ class IterableTaskRunner: NSObject {
277279

278280
private func deleteTask(task: IterableTask) {
279281
ITBInfo("deleting task: \(task.id)")
280-
queue.async { [weak self] in
281-
do {
282-
try self?.persistenceContext.performAndWait {
283-
try self?.persistenceContext.delete(task: task)
284-
try self?.persistenceContext.save()
285-
}
286-
} catch let error {
287-
ITBError(error.localizedDescription)
288-
self?.healthMonitor.onDeleteError(task: task)
289-
}
282+
do {
283+
try self.persistenceContext.delete(task: task)
284+
try self.persistenceContext.save()
285+
} catch let error {
286+
ITBError(error.localizedDescription)
287+
self.healthMonitor.onDeleteError(task: task)
290288
}
291289
}
292290

@@ -298,7 +296,6 @@ class IterableTaskRunner: NSObject {
298296
case error
299297
}
300298

301-
private var queue = DispatchQueue(label: "TaskRunnerQueue")
302299
private var workItem: DispatchWorkItem?
303300
private var paused = false
304301
private let networkSession: NetworkSessionProtocol

0 commit comments

Comments
 (0)