有条件地延迟队列有限时间
Delaying a queue for a finite time, conditionally
如何在不使用睡眠的情况下延迟后台队列的执行?此外,如果需要,我该如何打断该延迟?
RunLoop
的文档建议围绕函数 run
使用 while 循环,并在 while 循环中使用自定义条件。但是我该如何设置定时器来切换 while 循环执行呢?
您可以 suspend
custom dispatch queues (but not global queues nor main queue). That stops new tasks from starting on that queue, but it does not affect things already running on that queue. You can resume
启动 运行 之前已分派到队列但尚未启动的项目。
GCD 还为 cancel
a particular work item, and dispatch it again later when you want execution to resume. Note that cancel
does not perform preemptive cancellation, but rather only sets a Boolean, isCancelled
提供了一种本机机制,您的分派任务需要定期检查并手动退出。
(如果你想取消队列上的任务,你可以考虑OperationQueue
,因为它比调度队列有更优雅的取消能力。或者你可以考虑[=16=的“结构化并发” ]-await
of Swift concurrency,也有取消 built-in。)
现在,虽然 GCD 没有“暂停”分派到后台线程的任务的概念,但您可以 jury-rig 非常小心地使用信号量来做一些事情。但细节会根据您的实施情况而有很大差异,因此如果没有更多细节,很难提供进一步的建议。
你问过:
The docs for RunLoop
suggest a while
loop around the function run
with a custom condition in the while
loop.
作为一般规则,应避免任何涉及 while
循环的旋转。这是一种非常低效的模式,应该避免。许多年前(例如,在 GCD 之前,在 URLSession
之前,等等),这种 spin-on-run-loop 模式并非闻所未闻(例如,它是 go-to 技术 运行 NSURLConnection
在后台线程上),但现在已经不合时宜了。这是一种低效的方法;一个 anti-pattern.
如何在不使用睡眠的情况下延迟后台队列的执行?此外,如果需要,我该如何打断该延迟?
RunLoop
的文档建议围绕函数 run
使用 while 循环,并在 while 循环中使用自定义条件。但是我该如何设置定时器来切换 while 循环执行呢?
您可以 suspend
custom dispatch queues (but not global queues nor main queue). That stops new tasks from starting on that queue, but it does not affect things already running on that queue. You can resume
启动 运行 之前已分派到队列但尚未启动的项目。
GCD 还为 cancel
a particular work item, and dispatch it again later when you want execution to resume. Note that cancel
does not perform preemptive cancellation, but rather only sets a Boolean, isCancelled
提供了一种本机机制,您的分派任务需要定期检查并手动退出。
(如果你想取消队列上的任务,你可以考虑OperationQueue
,因为它比调度队列有更优雅的取消能力。或者你可以考虑[=16=的“结构化并发” ]-await
of Swift concurrency,也有取消 built-in。)
现在,虽然 GCD 没有“暂停”分派到后台线程的任务的概念,但您可以 jury-rig 非常小心地使用信号量来做一些事情。但细节会根据您的实施情况而有很大差异,因此如果没有更多细节,很难提供进一步的建议。
你问过:
The docs for
RunLoop
suggest awhile
loop around the functionrun
with a custom condition in thewhile
loop.
作为一般规则,应避免任何涉及 while
循环的旋转。这是一种非常低效的模式,应该避免。许多年前(例如,在 GCD 之前,在 URLSession
之前,等等),这种 spin-on-run-loop 模式并非闻所未闻(例如,它是 go-to 技术 运行 NSURLConnection
在后台线程上),但现在已经不合时宜了。这是一种低效的方法;一个 anti-pattern.