[#471] CompactBlockValidationOperation to async (#515)

- CompactBlockValidationOperation wrapped to Task
This commit is contained in:
Lukas Korba 2022-08-30 15:56:39 +02:00 committed by GitHub
parent be24044b51
commit 29f159845d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 36 additions and 17 deletions

View File

@ -22,6 +22,8 @@ class CompactBlockValidationOperation: ZcashOperation {
private var cacheDb: URL
private var dataDb: URL
private var network: NetworkType
private var cancelableTask: Task<Void, Error>?
private var done = false
init(
rustWelding: ZcashRustBackendWelding.Type,
@ -44,6 +46,7 @@ class CompactBlockValidationOperation: ZcashOperation {
self.startedHandler?()
cancelableTask = Task {
let result = self.rustBackend.validateCombinedChain(dbCache: cacheDb, dbData: dataDb, networkType: self.network)
switch result {
@ -54,6 +57,7 @@ class CompactBlockValidationOperation: ZcashOperation {
self.fail(error: error)
case ZcashRustBackendWeldingConstants.validChain:
self.done = true
break
default:
@ -63,4 +67,19 @@ class CompactBlockValidationOperation: ZcashOperation {
self.fail(error: error)
}
}
while !done && !isCancelled {
sleep(1)
}
}
override func fail(error: Error? = nil) {
self.cancelableTask?.cancel()
super.fail(error: error)
}
override func cancel() {
self.cancelableTask?.cancel()
super.cancel()
}
}