Sunday 2 July 2017

Waitforexpectationswithtimeout Objektiv C Herunterladen


Ich hatte das gleiche Problem. Der Fix für mich schien das Timeout-Intervall zu erhöhen. Ich hatte ursprünglich ein Timeout Intervall von 1 und erhöhte es auf 5 nur auf der sicheren Seite sein. Scheint jetzt gut zu funktionieren. Im nicht sicher, wie lang Ihr async Anruf nimmt, oder wenn Sie ein längeres Timeoutintervall als 1 leisten können, aber sein wert ein Schuß. Ich antwortete, in 50 Fällen half es. Sie können im Code sehen, den ich gepostet habe, dass async gerade Abfertigung danach ist, das 0.5s wartet. Am Ende bin ich niling die Erwartung nach Wartezeitblock und alle behauptet auch nach Warteblock. So geschieht nichts während des Wartens, sondern erfüllt. Ndash Micha Hernas Swift hat es besondere Schwierigkeiten, den richtigen Ausnahmestopppunkt zu zeigen, wenn Verschlüsse im gleichen Bereich vorhanden sind. Ive gesehen das gleiche Problem in einer XCTestCase, die dispatchafter verwendet und sogar durch den Ausnahme-Haltepunkt war die gleiche Zeile wie waitForExpectationsWithTimeout der Testfall stürzte wegen eines Downcast auf einem Null-Objekt. Ich weiß, das ist nicht dein Fall, aber wenn dies geschieht, schlage ich vor, Entfernen von Anweisungen eine Zeile zu einer Zeit und Ausführen des Tests nach jeder Entfernung. Wenn der Test nicht abstürzt, haben Sie den Täter identifiziert. Dies ist leider die beste Option zum Zeitpunkt dieses Schreibens, wenn Swift zeigt einen Ausnahme-Haltepunkt auf einer Linie, die keinen Sinn macht, vor allem die berüchtigte Linie 0 einer Klasse, die Sie möglicherweise in Crash-Reporting-Tools zu sehen. Informieren Sie uns, wenn Sie Ihren crash herausgefunden haben. Zusätzlich zur Semaphore-Technik, die vollständig in anderen Antworten abgedeckt wird, können wir jetzt XCTest in Xcode 6 verwenden, um asynchrone Tests über XCTestExpectation durchzuführen. Dies beseitigt die Notwendigkeit für Semaphoren beim Testen von asynchronen Code. Zum Beispiel: Für die zukünftigen Leser, während die Dispatch-Semaphore-Technik ist eine wunderbare Technik, wenn unbedingt erforderlich, muss ich gestehen, dass ich zu viele neue Entwickler, nicht vertraut mit guten asynchronen Programmierung Muster, gravitieren zu schnell zu Semaphoren als allgemeiner Mechanismus zu sehen Um asynchrone Routinen synchron zu verhalten. Worse Ive gesehen viele von ihnen verwenden diese Semaphore-Technik aus der Haupt-Warteschlange (und wir sollten nie blockieren die Haupt-Warteschlange in der Produktion apps). Ich weiß, das ist nicht der Fall hier (wenn diese Frage geschrieben wurde, gab es nicht ein nettes Tool wie XCTestExpectation auch, in diesen Tests Suiten müssen wir sicherstellen, dass der Test nicht beenden, bis der asynchrone Aufruf getan wird). Dies ist eine der seltenen Situationen, in denen die Semaphore-Technik zum Blockieren des Hauptfadens notwendig sein könnte. Ich schreibe also mit meiner Entschuldigung an den Verfasser dieser ursprünglichen Frage, für die die Semaphore-Technik gesund ist, diese Warnung an alle neuen Entwickler, die diese Semaphore-Technik sehen und sie in ihrem Code als einen allgemeinen Ansatz für den Umgang mit Asynchronous anwenden Methoden: Seien Sie vorgewarnt, dass neun Mal von zehn, die Semaphore-Technik ist nicht der beste Ansatz, wenn encounting asynchronen Operationen. Stattdessen vertraut machen Sie sich mit Fertigstellungsblockmustern, sowie Delegate-Protokoll-Muster und Benachrichtigungen. Dies sind oft viel bessere Möglichkeiten, um mit asynchronen Aufgaben, anstatt mit Semaphoren, um sie sich synchron zu verhalten. In der Regel gibt es gute Gründe, dass asynchrone Aufgaben asynchron verhalten wurden, also verwenden Sie das richtige asynchrone Muster, anstatt zu versuchen, sie sich synchron zu verhalten. Ich habe eine Frage zu diesem Thema. Ich habe einige asynchrone Code, der etwa ein Dutzend AFNetworking Download Anrufe führt, um ein einziges Dokument herunterladen. Ich möchte gerne Downloads auf einer NSOperationQueue planen. Sofern ich nicht so etwas wie ein Semaphor zu verwenden, wird das Dokument herunterladen NSOperation s werden alle sofort erscheinen, um zu vervollständigen und es wird keine wirkliche Schlange von Downloads werden sie ziemlich viel vor, was ich don39t wollen. Sind Semaphoren vernünftig hier Oder gibt es einen besseren Weg, um NSOperations für das asynchrone Ende der anderen warten oder etwas anderes ndash Benjohn Nein, don39t Verwendung Semaphoren in dieser Situation. Wenn Sie eine Operationswarteschlange haben, zu der Sie die AFHTTPRequestOperation-Objekte hinzufügen, sollten Sie dann nur eine Abschlussoperation erstellen (die Sie abhängig von den anderen Operationen herstellen). Oder verwenden Sie Versandgruppen. BTW, Sie sagen, Sie don39t wollen, dass sie gleichzeitig laufen, was in Ordnung ist, wenn that39s, was Sie brauchen, aber Sie bezahlen ernsthafte Leistung Strafe tun dies sequentiell anstatt gleichzeitig. Ich verwende generell maxConcurrentOperationCount von 4 oder 5. ndash Rob Jun 12 15 am 13:12

No comments:

Post a Comment