Swift - 内部有后台线程的退出函数
Swift - Exit function with background thread inside
我有一个函数可以在后台循环并更新 UI:
func doSomething() {
DispatchQueue.global(qos: .userInteractive).async {
for ... {
if ... {
...
DispatchQueue.main.async {
//Update UI
...
if ... {
// Show UIAlert
//Exit function
}
}
}
}
}
}
我想退出函数(因此取消后台线程)。如果我使用 return
,则会显示警报,但后台线程会一直循环数据到最后。我认为原因是当交换到主线程时,我超出了函数的范围。
我是 Swift 多线程的新手,有什么想法吗?
据我所知,如果您想停止在后台线程上执行 for 循环,即 运行,然后你必须从你试图从主线程代码块停止的后台线程本身停止它。尝试下面的行:
func doSomething() {
var continueForLoop = true
DispatchQueue.global(qos: .userInteractive).async {
for ... {
if ... && continueForLoop{
...
DispatchQueue.main.sync {
//Update UI
...
if ... {
// Show UIAlert
//Exit function
continueForLoop = false
}
}
}else{
break;
}
}
}
}
P.S。要了解 iOS 中的多线程,请考虑以下 link:iOS Concurrency 注意:尝试仅了解多线程部分,因为代码包含旧的 swift 语法。
我有一个函数可以在后台循环并更新 UI:
func doSomething() {
DispatchQueue.global(qos: .userInteractive).async {
for ... {
if ... {
...
DispatchQueue.main.async {
//Update UI
...
if ... {
// Show UIAlert
//Exit function
}
}
}
}
}
}
我想退出函数(因此取消后台线程)。如果我使用 return
,则会显示警报,但后台线程会一直循环数据到最后。我认为原因是当交换到主线程时,我超出了函数的范围。
我是 Swift 多线程的新手,有什么想法吗?
据我所知,如果您想停止在后台线程上执行 for 循环,即 运行,然后你必须从你试图从主线程代码块停止的后台线程本身停止它。尝试下面的行:
func doSomething() {
var continueForLoop = true
DispatchQueue.global(qos: .userInteractive).async {
for ... {
if ... && continueForLoop{
...
DispatchQueue.main.sync {
//Update UI
...
if ... {
// Show UIAlert
//Exit function
continueForLoop = false
}
}
}else{
break;
}
}
}
}
P.S。要了解 iOS 中的多线程,请考虑以下 link:iOS Concurrency 注意:尝试仅了解多线程部分,因为代码包含旧的 swift 语法。