Я реализовал блок, который передается асинхронно с помощью НОД следующим образом:Как убить/приостановить/закрыть асинхронный блок в GCD?
__block BOOL retValue;
dispatch_async(dispatch_get_global_queue(0, 0), ^{
retValue = [self GCDHandler:actionName WithServiceType:serviceType :arguments];
});
return retValue;
Как отменить такой блок, если он работает дольше, чем хотелось бы? Есть ли способ отменить GCD-отправленные блоки или предоставить им тайм-аут?
Это на 100% верно, хотя если block() является долговременной операцией, тогда проверка заранее, вероятно, не даст вам результатов, которые вы ищете. Ответ заключается в том, чтобы разбить блок() на более мелкие операции, каждый из которых может быть независимо отменен или поместить проверки для «checkIfCancelled» в сам блок, чтобы он мог периодически следить за тем, чтобы все еще было нормально работать или, если нет, отключить операцию прогресс и возвращение. – jkh