Puoi interrogare una coda seriale GCD per il numero di tak in attesa?

Sto assumendo la properties; di un'app client scritta da uno dei dipendenti del cliente che era nuovo allo sviluppo di iOS (e da allora ha lasciato l'azienda)

Sto cercando di capire come migliorare l'uso della concorrenza. Stava creando un sacco di diversi timer GCD con ritardi diversi, e il tempismo era un disastro.

Probabilmente lo convertirò in una coda seriale GCD, dal momento che ho bisogno che le attività vengano eseguite in ordine sequenziale (ma non sul thread principale). Mi piacerebbe monitorare quanto in profondità le attività in sospeso arrivano in coda . NSOperationQueues ha una function per esaminare il numero di attività in sospeso, ma non vedo un'opzione simile per le code seriali GCD. C'è una tale struttura?

Immagino che potrei creare un NSOperationQueue e fare in modo che each operazione dipenda dall'operazione precedente, creando così una coda di operazioni seriali, ma è molto lavoro semplicemente per diagnosticare il numero di attività che sono nella mia coda in qualsiasi momento.

Solutions Collecting From Web of "Puoi interrogare una coda seriale GCD per il numero di tak in attesa?"

Non ci sono API pubbliche per interrogare il numero di attività in una coda GCD. Potresti creare qualcosa da te o usare NSOperationQueue . Se volessi creare qualcosa, potresti inserire dispatch_a/sync per incrementare un contatore, e quindi accodare un altro block con each operazione che decrementa il contatore, in questo modo:

 int64_t numTasks = 0 void counted_dispatch_async(dispatch_queue_t queue, dispatch_block_t block) { OSAtomicIncrement64(&numTasks); dispatch_async(queue, ^{ block(); OSAtomicDecrement64(&numTasks); }); } 

O potresti semplicemente usare NSOperationQueue. Questo è quello che farei. Un uomo saggio una volta mi disse: "Usa l'astrazione di livello più alto che faccia il lavoro".