我試圖實現一個使用定時器的函數,並且在通過「URLSession.dataTask」的回調函數調用它時發現定時器沒有執行。在子任務的情況下不執行定時器
在下面的情況下,調用「被調用者」函數。
class TimerClass {
func caller() {
timer = Timer.scheduledTimer(timeInterval: 0.1,
target: self,
selector: #selector(callee),
userInfo: nil,
repeats: false)
}
func callee() {
print(「OK」)
}
}
class AnyClass {
func any() {
let timer:TimerClass=TimerClass()
timer.caller()
}
}
但是,在「callee」下方不會被調用。 (我已經確認「調用者」功能被執行)
class TimerClass {
func caller() {
timer = Timer.scheduledTimer(timeInterval: 0.1,
target: self,
selector: #selector(callee),
userInfo: nil,
repeats: false)
}
func callee() {
print(「OK」)
}
}
class AnyClass {
func any() {
func cb(data:Data?, response:URLResponse?, err:Error?) {
let timer:TimerClass=TimerClass()
timer.caller()
}
let task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: cb)
.
.
.
}
}
我想也許是因爲它是由子任務執行的。
任何人都可以讓我知道如何更正代碼?
謝謝你回答我的問題。這正是我想知道的,而且我的代碼已經成爲我想要的。 –
@ Ken.Matushima,對不起,我完全忘記檢查'RunLoop'的線程安全性,並且清楚地表明**'RunLoop'類通常不被認爲是線程安全的**,所以請嘗試我更新的答案。 – OOPer
謝謝你告訴我。我明白了。我會以另一種方式尋找。 –