gpt4 book ai didi

cocoa - 如何确保 NSOperations 以故障安全的方式执行?

转载 作者:行者123 更新时间:2023-12-03 16:27:48 27 4
gpt4 key购买 nike

我想要什么

我的应用程序中有一个 NSOperationQueue,在应用程序退出之前处理所有操作至关重要。我在退出时有以下代码,以确保 NSOperationQueue 在退出之前为空:

if ([NSThread isMainThread]) {
while ([[operationQueue operations] count] > 0) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.05]];
}
} else {
[operationQueue waitUntilAllOperationsAreFinished];
}

我的代码之前遇到过一个问题,其中 NSOperation 在完成之前“卡住”并阻塞了整个队列。显然,在这种情况下,我的代码应该抛出异常,而现在确实如此。

但我仍然想防止发生任何奇怪的情况,即操作停止并阻塞队列,导致应用程序永远不会退出并且错误未被捕获。

我的垃圾解决方案

我正在考虑对完成其操作的队列设置超时。然后,当超时时,我可以抛出异常,然后可以捕获问题。

但是,这感觉不对。理想情况下,我不想依赖计时器来确保工作完成。

我的问题

有没有更好的、安全的方法来确保我的操作没有卡住?

最佳答案

如果我明白的话...

  • 您想知道您的操作没有卡住...变成...
  • 您想知道所有操作都将完成执行...变成...
  • 您想解决the halting problem

祝你好运。

但实际上,您使用 waitUntilAllOperationsAreFinished 所做的事情与您将获得的效果差不多。您可以添加另一个类来监视每个操作并确保它不会运行太长时间(比如比您期望的运行时间长 10 倍),此时它将-cancel NSOperation (或多或少是你的计时器方法)。然而,即使这样也不是万无一失的,因为操作可能会在无法检查 -isCancelled 的地方被阻止(例如,在系统调用内)。

关于cocoa - 如何确保 NSOperations 以故障安全的方式执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3404784/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com