问题标签 [dispatch-queue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
422 浏览

swift - DispatchQueue.main.async 块中未更新完成处理程序的返回值

我正在从一个类调用一个带有完成处理程序的函数到另一个类

称为类:

调用类:

在完成处理程序返回后,monthlyAckW 具有正确的值。但是分配给 self?.estimatedSolarkWh 的值为 0,值永远不会转移到当前类范围,UI 更新失败,即使在 DispatchQueue.main.async 之后如何解决这个问题?

0 投票
1 回答
947 浏览

ios - Playground - DispatchQueue.main.asyncAfter 不工作

我在Playground中运行以下命令,但没有打印任何内容:

0 投票
3 回答
8988 浏览

swift - Swift 取消 DispatchQueue 进程

我有一个 UDP 方法,它使用 DispatchQueue 使用以下代码等待回复:

这非常有效,并启动了一个等待我的数据进入的过程。让我彻夜难眠的是,如果我们永远得不到回复,会发生什么?server.recv 永远不会返回,所以我看不到该过程将如何结束?有没有办法给它预定的运行时间?

0 投票
1 回答
1339 浏览

swift - 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在索引 0 处为 fd -1 设置 posix_spawn_file_actions

在 Swift 4 中,在 Xcode 版本 9.3.1 (9E501) 上,我利用在后台DispatchQueue.global(qos: .background).async {...}运行一个while(true)循环:

Verification.onCompanyNetwork()正在通过 bash 脚本运行 ping 以查看是否有来自公司网络上的服务器的响应。

我需要这个线程在这个应用程序的任何时候都在后台运行——所以即使它失败了,我怎样才能捕捉到异常并确保线程再次启动?现在我什至不确定为什么线程失败了......

到目前为止发现的两个崩溃场景:

  • 在运行应用程序时(在 Xcode 之外),应用程序平均在连续运行 3-6 小时后崩溃
  • 在运行应用程序(在 Xcode 内部)时,即使连续运行 3-6 小时,应用程序也不会崩溃

整个错误消息如下所示:

0 投票
0 回答
44 浏览

objective-c - 调度队列和调度组如何工作?

我是objective-c的新手,目前我正在编写从服务器下载文件然后对下载的文件进行一些操作的代码。我对调度队列和调度组感到困惑。

所以我有一个名为 dowanloadZip 的函数,在这个 downloadZip 函数中,我正在使用另一个名为 startHttp 的函数来触发请求,但是这个函数是异步的,我需要等到完成块完成然后我才能继续检查文件是否完整,做一些事情等等。基本上,我需要等到完成块完成然后我才能继续做其他事情。我的代码看起来像这样:

有人告诉我使用调度队列,但其他人说使用调度组,我发现一些代码实际上两者都使用。我阅读的代码首先使用调度全局队列,然后在队列中使用调度组进入。那么我应该先创建一个调度队列,然后进入完成块内的组吗?还是只使用调度组?(我希望它在后台线程上)。我也想知道,如果我需要在其他地方调用 downloadZip 函数,我该怎么办?

0 投票
2 回答
977 浏览

swift - Swift - 如何防止 DispatchQueues 在同一个线程上执行?

我最近一直在学习线程和 DispatchQueues 并且遇到了一个大问题。我多次听说 GCD不保证可以在哪个线程上执行给定的工作块。大多数时候,这是一个有用的层次抽象。但是,我遇到了一个我仍然不知道原因的错误,但这让我意识到在我看来这似乎是 GCD 这方面的一个潜在陷阱。

例子:

我的问题是,我是否至少可以保证我的队列不会在同一个线程上执行?从我所见,我似乎没有这个保证。但是,没有它,我不是一直处于僵局的危险之中吗?在上面的例子中,如果两个队列都在线程 7 上执行会发生什么?调用不会queue2.sync导致应用程序崩溃吗?

0 投票
0 回答
48 浏览

ios - 如何在不等待响应 swift ios 的情况下同时调用 Web 服务?

我们必须在后台线程中同时发送捕获的图像。我们已经使用这个 DispatchQueue 来调用下面的 API。

问题是我在捕获文档后要调用另一个服务“会话”Web 服务。无需等待回复。但我无法为这个“会话”网络服务获得价值。如何在不等待响应的情况下同时调用服务。

0 投票
1 回答
60 浏览

ios - 终止前一个后调用下一个函数

在 func getJsonData结束后,我需要调用 func fillFields

func getJsonData 是一个异步任务,用于在服务器上为 URLRequest 获取数据。

如何知道函数 getAPIData 是否完成?

0 投票
1 回答
64 浏览

swift - 异步同时播放多个 AVAudioPlayer?

我有一个通常可以正常工作的背景 AVAudioPlayer。现在我有一些事件会触发一个延迟的异步动作,在这里我想播放另一个声音,而另一个应该继续播放。所以我做了一个新的:

所以第一个运行正常(调度只是为了表明它也在异步工作)。第二个也运行,这意味着没有错误。不过,我只听过第一个...

0 投票
1 回答
1196 浏览

ios - DispatchQueue.global(qos: .default) 在应用程序后台或屏幕锁定时继续,如何暂停?

Swift Newbie:将 Objective-C AppleHealth 集成代码移植到由 Flutter/Dart 调用的 Swift。当我背景或锁定旧版 Obj-C 应用程序时,它几乎会立即暂停所有执行。但是,在我的 Swift 代码端口中不会发生相同的行为,我在 Swift 中使用与旧版 Obj-C 应用程序中相同的 DispatchQueue,

暂停很重要的原因是,一旦用户锁定 iPhone 屏幕,AppleHealth 会加密其所有数据并且不可用。我的理解也是正确的,当您暂停 DispatchQueue 时,当前执行的块将完成,但后续块不会开始执行。据我所知,Swift 代码移植模仿了 Obj-C 逻辑,任何关于它为什么表现不同或我可能遗漏的任何提示都将不胜感激。

我正在使用

如果可以让新应用程序立即暂停我提交给 DispatchQueue 的所有执行代码,那么在后台或锁定屏幕时我会非常高兴。