DispatchQueue
s ne sont pas des unités d'exécution. Vous remarquerez qu'il n'y a aucun moyen d'obtenir le DispatchQueue
actuel de la façon dont vous pouvez obtenir le fil actuel. Si vous voulez juste d'exécuter du code quelque part qui n'est pas le thread principal, vous pouvez utiliser:
DispatchQueue.global().async { ... }
Si vous voulez vraiment cibler votre thread spécifique, vous avez deux choix.
Le premier est que vous pouvez utiliser NSObject
perform(_:on:with:waitUntilDone:)
(ou l'une des méthodes connexes) et passez le NSThread
vous avez obtenu. Il n'y a pas assez de contexte dans votre question pour dire si cela fonctionnera pour vous ou pour donner un exemple, mais vous pouvez chercher.
Le second est à nouveau travailler votre code qui commence tout cela d'utiliser un NSOperationQueue
, donc foobar()
serait exécuté dans une opération sur le NSOperationQueue
puis dans votre fin de l'animation, vous souhaitez programmer une autre NSOperation
pour fonctionner sur la même file d'attente d'opération. Vous pouvez également le faire en utilisant les files d'attente de répartition directement: c'est-à-dire créer votre propre file d'attente, envoyer foobar, puis renvoyer dans votre file d'attente à partir de main lorsque l'animation est terminée.
il vaudra mieux que vous créiez un nouveau thread à la place en utilisant le thread en cours d'exécution. et gardez un accès en dehors de la méthode, et démarrez-le lorsque vous appelez cette méthode. class var current: Thread Renvoie l'objet thread représentant le thread d'exécution en cours. – Deepak
Pourquoi avez-vous besoin d'exécuter du code sur un thread spécifique? Vous ne devriez pas avoir à le faire et cela est découragé. Vous voulez probablement 'DispatchQueue.global(). Async' dans le bloc d'achèvement et y exécuter le code, mais laissez-nous savoir pourquoi vous voulez que le code s'exécute sur un thread cible. – Alistra
Il est très fréquent de vouloir appeler les délégués sur le même fil qu'ils ont appelé. Malheureusement, gcd ne supporte pas vraiment cela. PerformSelector de NSObject: onThread peut être utilisé, mais ce n'est pas une API très propre. J'ai vu les programmes ont leur propre méthode performBlock: onThread qui utilise performSelector: onThread. – EricS