问题标签 [dispatch-async]

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 投票
6 回答
145290 浏览

ios - iPhone - Grand Central Dispatch 主线程

我一直在成功地使用我的应用程序中的大型中央调度,但我想知道使用这样的东西的真正优势是什么:

甚至

我的意思是,在这两种情况下,您都会触发一个要在主线程上执行的块,这正是应用程序运行的位置,这无助于减少负载。在第一种情况下,您无法控制块何时运行。我见过在你触发它们半秒后执行块的情况。第二种情况,类似

正确的?

我想知道你们怎么看。

0 投票
3 回答
26466 浏览

objective-c - 使用 dispatch_get_main_queue() 是否意味着我的代码将在主线程上?

以下代码是否在主线程上运行?“主队列”是指主线程吗?

0 投票
0 回答
601 浏览

multithreading - 如何检查 dispatch_async 是否已完成执行块

我有一个关于 dispatch_async 的问题。我想确保队列完成执行,因为我需要返回一个仅在块完成时获得的值。

当前返回值将为零,因为调用 return 函数时 dispatch_async(dispatch_get_main_queue(), ^{..} 尚未执行。我如何确保在调用 return 之前完成?谢谢!

0 投票
2 回答
2840 浏览

dispatch-async - dispatch_async 阻塞到串行队列是否保持顺序?

当我通过 dispatch_async 将两个块提交到串行队列中时,它是否确保第二个在第一个之后运行:

  • dispatch_async(serial_queue, b1);
  • dispatch_async(serial_queue, b2);

我们能保证 b1 在 b2 之前运行吗?

以下是完整的源代码部分:

我们可以保证 m_value == COUNTER 总是吗?谢谢

0 投票
1 回答
715 浏览

ios - IOS dispatch_async 视图会消失

我正在使用 dispatch_async 和一个块每 3 秒左右检索一次服务器数据。处理视图消失或用户关闭程序的方法是什么?

它会是一个布尔标志,异步块不时检查吗?如果是这样,如果视图在异步块处于休眠状态时退出怎么办?

0 投票
1 回答
1071 浏览

testing - 像 dispatch_async 这样的代码的单元测试。

需要对以下代码进行单元测试,dispatch_async 表示代码不会按应用逻辑顺序执行,请问如何使其及时运行?

谢谢你。

0 投票
1 回答
2467 浏览

iphone - 在 dispatch_async 中更新 UIProgressView

我让我的应用程序使用 dispatch_async 进行 google API 调用并获取我正在解析的 JSON 结果。我想实现一个进度视图,以便它根据我解析的 JSON 响应的结果数量进行更新。

所以我的 dispatch_async Google API 调用是:

我的fetchResultsForGoogle: withObject:方法解析结果,我想在屏幕上显示处理结果的数量的进度视图。所以在fetchResultsForGoogle...方法中,我想要:

但我认为理解当 dispatch_async 在另一个线程上执行时,如果不使用dispatch_async(dispatch_get_main_queue(). 为了解决这个问题,我尝试了两种实现方法(如下所示),但这些方法中的任何一种都不适合我(progressView并且progressViewLabel根本不更新)。

计划A:

B计划:

fetchResultsForGoogle...方法内:

因此,非常感谢有关正确实施此方法的任何想法或提示!

编辑解决它 我修复了它。在dispatch_async块中,我将它传递给performSelectorOnMainThread. 因此,当我尝试在 中更新进度视图时performSelectorOnMainThread,UI 将dispatch_async在完成之前更新。

因此,我将其更改为块performSelectorInBackgroundThread内部dispatch_async,现在以performSelectorOnMainThread应有的方式更新 UI。

我对这一切都很陌生,但我很高兴我仍在学习新事物。

0 投票
1 回答
258 浏览

ios - 从 iOS 中的不同线程调用控制器方法

我正在尝试从在不同线程中运行的音乐渲染函数调用此方法。方法在里面InstrumentGridViewController

这就是我调用该方法的方式:

但我收到了这个警告:

当我尝试运行时:

我确定该方法在那里,所以我真的不明白为什么会发生这种情况。

编辑:H2CO3 说我应该在当前运行的实例上调用 stopPlayback 方法。任何想法我怎么能做到这一点?

0 投票
1 回答
2021 浏览

multithreading - dispatch_async 不能与后台线程一起工作

我要从数据库加载一些重要内容并显示在屏幕上。但同时有一个“plist to Database”保存的后台任务正在进行中。因此 UI 卡住了。

我使用的代码如下,

用于数据库获取和 UI 更新方法

我将“Plist to DB”方法称为

这里taskBlock是繁重的数据库获取,completionBlock是 UI 更新。

如果我在一段时间后(方法完成后)调用此方法,syncData那么它会顺利更新。但如果它还没有完成,那么 UI 就会卡住。

似乎是线程死锁的问题,但对此尚不清楚

请帮忙 !!

0 投票
1 回答
794 浏览

ios - MKOverlay 需要很长时间才能从异步调用中显示

我正在使用 MKMapView 和 MKPolyline 来显示路线形状。当在我的 MKMapView 上放置注释并且已经存在另一个注释时,它将异步向我的路线提供者发送路由调用并添加形状覆盖。

这就是问题所在。如果我对请求使用主线程,它将在请求进行时冻结 MKAnnotation 下降,但当它返回时,它会很好地显示覆盖。相反,如果我将请求分派到异步队列,则注释删除中不会冻结,并且当异步调用完成时,它会添加叠加层,但 MapView 需要一段时间才能意识到这一点并实际绘制叠加层。有时需要20秒。这是代码。

实际路线计算在这里:

如果我使用上面的代码并注释掉 async 指令,则需要相同的时间来处理它,这会引起烦人的冻结,但是会立即绘制覆盖层:

知道为什么 MKMapView 需要一段时间才能意识到它需要在异步完成时绘制叠加层吗?

谢谢奥雷里奥