DispatchQueue 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供一個任務佇列,可同步或非同步執行任務。
public sealed class DispatchQueue : CoreFoundation.DispatchObject
type DispatchQueue = class
inherit DispatchObject
- 繼承
備註
佇列是 Apple Grand Central Dispatch 框架中排程區塊執行的基本機制。
所有提交到派遣佇列的區塊都會依 FIFO 順序進行出隊。 預設情況下,使用預設建構子建立的佇列會等待先前被出隊的區塊完成後,才會下排下一個區塊。 這種 FIFO 完成行為有時簡稱為「序列佇列」。 佇列不會綁定在任何特定的執行執行緒,提交給獨立佇列的區塊可以同時執行。 佇列和所有派遣物件一樣,會被引用計數,而新建立的隊列則有參考計數為一。
並行派遣佇列是透過傳遞 true 作為建構子中並行參數的值來建立的。 並行佇列可同時呼叫區塊(類似全域並行佇列,但可能有更多開銷),並支援以派遣障礙 API 提交的障礙區塊,例如實現高效的讀寫方案。
可選的標籤參數用於描述佇列的目的,並在除錯與效能分析中非常有用。 依慣例,用戶端應該傳遞反向 DNS 風格標籤。 若提供標籤,則會被複製。 若未提供標籤,則 Label 屬性會回傳空的 C 字串。 例如:
var my_queue = new DispatchQueue ("com.example.subsystem.taskXYZ");
佇列可以暫時暫停,並分別以 和 Resume() 的函式Suspend()恢復。 暫停會在區塊執行前檢查,且非搶先執行。
派遣隊列會 SynchronizationContext 知道,除非執行緒有自訂的同步情境,否則會自行安裝同步情境,以確保任何情境派遣都會落在同一個派遣隊列。
派遣障礙 API
dispatch barrier API 是一種將 barrier 區塊提交到派遣佇列的機制,類似於這些 DispatchAsync(Action)/DispatchSync(Action) 方法。 它使得高效的讀寫方案得以實現。 障礙區塊僅在提交至並行佇列時才會特別表現;在此類佇列中,障礙區塊會在先前提交至該佇列的所有區塊完成前才會執行,而在障礙區塊之後提交到佇列的區塊也不會在障礙區塊完成前執行。 當提交到全域佇列或非並行佇列時,障礙區塊的行為與以這些 DispatchAsync(Action)/DispatchSync(Action) 方法提交的區塊相同。
建構函式
| 名稱 | Description |
|---|---|
| DispatchQueue(String, Boolean) |
建立一個命名的派遣佇列,可選擇性地同時執行任何提交的程式碼。 |
| DispatchQueue(String, DispatchQueue+Attributes, DispatchQueue) |
提供一個任務佇列,可同步或非同步執行任務。 |
| DispatchQueue(String) |
建立一個命名的派遣隊列,將所有提交的區塊序列化。 |
屬性
| 名稱 | Description |
|---|---|
| Context |
使用者定義的上下文資訊附加於派遣佇列。 |
| CurrentQueue |
開發者不應使用這個已棄用的特性。 |
| CurrentQueueLabel |
目前佇列的標籤。 |
| DefaultGlobalQueue |
回傳預設的全域佇列,這是內建佇列之一,且以預設優先順序存在。 |
| Handle |
提供一個任務佇列,可同步或非同步執行任務。 (繼承來源 DisposableObject) |
| Label |
回傳此 DispatchQueue 的標籤。 |
| MainQueue |
回傳主全域佇列。 |
| Owns |
提供一個任務佇列,可同步或非同步執行任務。 (繼承來源 DisposableObject) |
| QualityOfService |
提供一個任務佇列,可同步或非同步執行任務。 |
方法
擴充方法
| 名稱 | Description |
|---|---|
| GetHandle(INativeObject) |
提供一個任務佇列,可同步或非同步執行任務。 |
| GetNonNullHandle(INativeObject, String) |
提供一個任務佇列,可同步或非同步執行任務。 |