假設我有做一些異步任務的方法。假設它刷新用戶的訪問權限,並且可能需要幾分鐘時間,具體取決於互聯網連接速度等。如何在該方法本身正在進行異步任務時跳過對方法的預定調用?
我不得不周期性地調用該方法(即,使用排定呼叫NSTimer
的方法scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:
)
-(void)refreshPermission {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// do something that takes a few minutes
});
}
現在我調用此方法如timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(refreshPermission) userInfo:nil repeats:YES];
。也就是說,這個調用每10秒觸發一次。
我需要做的是,我需要以某種方式跳過一個(或多個) 計劃調用此方法如果事情是, 異步塊內部發生(比方說,用戶的訪問許可尚未 更新)。
但是一旦塊完成(也就是說,用戶的訪問權限已更新),與計時器排定呼叫應該恢復。
任何想法或如何做到這一點的任何樣本?
嗯,這是聰明的。但是,我認爲應該在'dispatch_async'塊之前檢查並設置bool爲YES。對? – nayem
但是它保證**在dispatch_async塊內設置'isExecuting = NO'會在任務完成後發生**嗎? – nayem
更新的答案應該可以工作。 – Sunny