fix threading violation

This commit is contained in:
Satindar Dhillon 2022-06-16 19:22:49 -07:00
parent 1cdfe4a439
commit b09268bad2
2 changed files with 9 additions and 8 deletions

View file

@ -1,7 +1,6 @@
import CoreData
import Foundation
import Models
import SwiftGraphQL
import Utils
struct PendingLink {
@ -176,10 +175,12 @@ extension DataService {
/// Queries CoreData for a LinkedItem using a requestID.
/// - Parameter requestID: A requestID used to check on a newly created item.
/// - Returns: The id of the CoreData object if found.
func linkedItemID(from requestID: String) -> String? {
let fetchRequest: NSFetchRequest<Models.LinkedItem> = LinkedItem.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "createdId == %@ OR id == %@", requestID, requestID)
return try? backgroundContext.fetch(fetchRequest).first?.unwrappedID
func linkedItemID(from requestID: String) async -> String? {
await backgroundContext.perform(schedule: .immediate) {
let fetchRequest: NSFetchRequest<Models.LinkedItem> = LinkedItem.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "createdId == %@ OR id == %@", requestID, requestID)
return try? self.backgroundContext.fetch(fetchRequest).first?.unwrappedID
}
}
func syncUnsyncedArticleContent(itemID: String) async {

View file

@ -33,9 +33,9 @@ public extension DataService {
let retryDelayInNanoSeconds = UInt64(requestCount * 2 * 1_000_000_000)
try await Task.sleep(nanoseconds: retryDelayInNanoSeconds)
logger.debug("fetching content for \(itemID). request count: \(requestCount)")
// Check for an updated requestID
let updatedItemID = linkedItemID(from: itemID) ?? itemID
return try await loadArticleContentWithRetries(itemID: updatedItemID, username: username, requestCount: requestCount + 1)
// Check for an updated itemID
let updatedItemID = await linkedItemID(from: itemID)
return try await loadArticleContentWithRetries(itemID: updatedItemID ?? itemID, username: username, requestCount: requestCount + 1)
case .succeeded, .unknown:
return fetchedContent
}