Wednesday, 1 March 2017

Waitforexpectationswithtimeout Objective C Download

J'ai eu le même problème. Le correctif pour moi semblait être l'augmentation de l'intervalle de temporisation. J'avais à l'origine un intervalle de temps de 1 et l'ai augmenté à 5 juste pour être du côté sûr. Semble fonctionner maintenant. Je ne sais pas combien de temps votre appel async prend, ou si vous pouvez vous permettre un intervalle de temps plus long que 1, mais il vaut un coup. A répondu 24 novembre à 20:14 J'ai essayé cela, dans 50 cas, il a aidé. Vous pouvez voir dans le code que j'ai posté que async est juste dispatchafter qui attend 0.5s. À la fin je suis niling le bloc d'attente après attente et faisant tout affirme aussi après le bloc d'attente. Donc, rien ne se passe en attendant, mais accomplir. Ndash Micha Hernas Nov 25 14 at 11:18 Swift a le problème spécial de montrer le point de rupture d'exception correct lorsque des fermetures sont présentes dans la même portée. Ive vu le même problème dans un XCTestCase qui a utilisé dispatchafter et même à travers le point d'arrêt d'exception était la même ligne que waitForExpectationsWithTimeout le cas de test se brisait à cause d'un downcast sur un objet nil. Je sais que ce n'est pas votre cas, mais chaque fois que cela se produit je suggère de supprimer les déclarations d'une ligne à la fois et l'exécution du test après chaque retrait. Si le test ne se bloque pas, vous avez identifié le coupable. C'est malheureusement la meilleure option au moment de cette écriture lorsque Swift montre un point d'arrêt d'exception sur une ligne qui n'a pas de sens, en particulier la ligne infâme 0 d'une classe que vous pourriez voir dans les outils de rapports d'incident. Laissez nous savoir si vous avez compris votre crash. In en plus de la technique de sémaphore couverts exhaustivement dans d'autres réponses, nous pouvons maintenant utiliser XCTest dans Xcode 6 pour effectuer des tests asynchrones via XCTestExpectation. Cela élimine le besoin de sémaphores lors du test du code asynchrone. Par exemple: Pour les futurs lecteurs, alors que la technique du sémaphore d'expédition est une technique merveilleuse quand elle est absolument nécessaire, je dois avouer que je vois trop de nouveaux développeurs, peu familiers avec de bons schémas de programmation asynchrones, gravitent trop vite aux sémaphores comme mécanisme général Pour rendre routines asynchrones se comportent de manière synchrone. Pire Ive vu beaucoup d'entre eux utilisent cette technique de sémaphore de la file d'attente principale (et nous ne devrions jamais bloquer la file d'attente principale dans les applications de production). Je sais que ce n'est pas le cas ici (lorsque cette question a été posté, il n'y avait pas un outil agréable comme XCTestExpectation également, dans ces suites de test, nous devons nous assurer que le test ne se termine pas jusqu'à ce que l'appel asynchrone soit terminé). C'est l'une de ces rares situations où la technique du sémaphore pour bloquer le thread principal peut être nécessaire. Donc, avec mes excuses à l'auteur de cette question originale, pour qui la technique de sémaphore est son, j'écris cet avertissement à tous les nouveaux développeurs qui voient cette technique de sémaphore et envisager de l'appliquer dans leur code comme une approche générale pour traiter les asynchrones Méthodes: Soyez prévenu que neuf fois sur dix, la technique de sémaphore n'est pas la meilleure approche lors de l'encodage des opérations asynchrones. Au lieu de cela, familiarisez vous avec les modèles de blocage de blocs d'achèvement, ainsi que les modèles de protocole délégué et les notifications. Ce sont souvent des manières beaucoup mieux de traiter des tâches asynchrones, plutôt que d'utiliser des sémaphores pour les faire se comporter de façon synchrone. Habituellement, il existe de bonnes raisons pour lesquelles les tâches asynchrones ont été conçues pour se comporter de manière asynchrone, alors utilisez le bon modèle asynchrone plutôt que d'essayer de les faire se comporter de manière synchrone. Répondue Sep 29 14 at 6:19 I39ve une question à ce sujet. J'ai obtenu un code asynchrone qui effectue environ une douzaine d'appels de téléchargement AFNetworking pour télécharger un seul document. J'aimerais programmer les téléchargements sur une NSOperationQueue. Sauf si j'utilise quelque chose comme un sémaphore, le téléchargement de document NSOperation s tout apparaîtra immédiatement à terminer et il won39t être n'importe quelle vraie file d'attente de téléchargements they39ll pratiquement procéder concurremment, ce que je don39t voulez. Est ce que les sémaphores sont raisonnables ici Ou y a t il un meilleur moyen de faire des NSOperations attendre la fin asynchrone des autres Ou autre chose Bendhon Jun 12 15 at 12:09 Non, don39t utiliser des sémaphores dans cette situation. Si vous disposez d'une file d'attente opérationnelle à laquelle vous ajoutez les objets AFHTTPRequestOperation, vous devez simplement créer une opération de fin (qui dépendra des autres opérations). Ou utiliser des groupes d'envoi. BTW, vous dites que vous ne voulez pas qu'ils fonctionnent simultanément, ce qui est très bien si c'est ce que vous avez besoin, mais vous payez des pénalités de performance sérieux faire cette séquence de façon simultanée. J'utilise généralement maxConcurrentOperationCount de 4 ou 5. ndash Rob Jun 12 15 at 13:12


No comments:

Post a Comment