DispatchQueue 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供可以同步或异步执行任务的任务队列。
public sealed class DispatchQueue : CoreFoundation.DispatchObject
type DispatchQueue = class
inherit DispatchObject
- 继承
- 继承
注解
队列是在 Apple Grand Central Dispatch 框架中计划执行块的基本机制。
提交到调度队列的所有块都按 FIFO 顺序取消排队。 默认情况下,使用默认构造函数创建的队列会等待先前取消排队的块完成,然后再取消下一个块的排队。 此 FIFO 完成行为有时简单地描述为“串行队列”。 队列不绑定到任何特定的执行线程,提交到独立队列的块可以并发执行。 与所有调度对象一样,队列将进行引用计数,新创建的队列的引用计数为 1。
通过将 作为构造函数上的并发参数的值传递 true
来创建并发调度队列。 并发队列可以像调用全局并发队列一样同时调用块 (,但) 开销可能更高,并且支持通过调度屏障 API 提交的屏障块,例如实现高效的读取器-编写器方案。
可选的 label 参数用于描述队列的用途,在调试和性能分析期间非常有用。 按照约定,客户端应传递反向 DNS 样式标签。 如果提供了标签,则复制该标签。 如果未提供标签,则 Label 属性返回空的 C 字符串。 例如:
var my_queue = new DispatchQueue ("com.example.subsystem.taskXYZ");
队列可能分别使用 函数 Suspend() 和 Resume() 暂时暂停和恢复。 暂停是在阻止执行之前检查的,而不是先发制人的。
调度队列是 T:System.Threading.SynchronizationContext 感知队列,除非为线程设置了自定义同步上下文,否则它将安装自己的同步上下文,以确保任何上下文调度最终位于同一调度队列中。
调度屏障 API
调度屏障 API 是一种将屏障块提交到调度队列的机制,类似于 DispatchAsync(Action)/DispatchSync(Action) 方法。 它支持实现高效的读取器/编写器方案。 屏障块仅在提交到并发队列时行为特殊;在此类队列中,屏障块不会运行,直到先前提交到队列的所有块都已完成,在屏障块完成后提交到队列的任何块都不会运行。 提交到全局队列或非并发队列时,屏障块的行为与使用 DispatchAsync(Action)/DispatchSync(Action) 方法提交的块的行为相同。
构造函数
DispatchQueue(IntPtr) |
将非托管 DispatchQueue 显示为托管对象。 |
DispatchQueue(String) |
创建序列化所有已提交块的命名调度队列。 |
DispatchQueue(String, Boolean) |
创建一个命名调度队列,该队列可以选择同时执行任何提交的代码。 |
DispatchQueue(String, DispatchQueue+Attributes, DispatchQueue) |
提供可以同步或异步执行任务的任务队列。 |
属性
Context |
用户定义的上下文信息附加到 DispatchQueue。 |
CurrentQueue |
开发人员不应使用此已弃用的属性。 |
CurrentQueueLabel |
当前队列的标签。 |
DefaultGlobalQueue |
返回默认全局队列,它是默认优先级的内置队列之一。 |
Handle |
提供可以同步或异步执行任务的任务队列。 (继承自 DispatchObject) |
Label |
返回此 DispatchQueue 的标签。 |
MainQueue |
返回主全局队列。 |
QualityOfService |
提供可以同步或异步执行任务的任务队列。 |
方法
运算符
Equality(DispatchQueue, DispatchQueue) |
提供可以同步或异步执行任务的任务队列。 |
Inequality(DispatchQueue, DispatchQueue) |
提供可以同步或异步执行任务的任务队列。 |