Xcode11 OSX Swift URLSession Datenrückgabe

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Aufgrund der sehr intensiven Fehlersuche - der Fehler lies sich nicht reproduzieren, ist mir letztendlich aufgefallen, dass der Zugriff auf die Ergebnisvariable das eigentliche Problem darstellte. Mehrere Threads wollten nach erledigter Arbeit auf eine Variable speichernd zugreifen und dies endete immer im Chaos. Dies hat mich bereits zweifeln lassen, ob ich den Code überhaupt verstehe. :rolleyes:

    Anbei ein Hinweis für diejenigen, welche ebenfalls mal das Vergnügen haben werden mit parallel laufenden Threads abreiten zu dürfen:

    - Sofern die Ergebnisse in einer Variablen (Typ spielt keine Rolle) von verschiedenen Threads aus gespeichert werden, sollte unbedingt der Zugriff via get- und set-Methode gesteuert werden.
    - Durch den Einsatz von Semaphoren kann außerdem der Ablauf gesteuert werden. :thumbsup:

    Durch den zweiten Punkte könnte ich auf die get- und set-Methode in meinem Fall verzichten. Für einen einen Clean-Code ist es jedoch ratsam nicht darauf zu verzichten.

    Viel Spaß

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von OSXDev ()

  • Tolibi schrieb:

    OSXDev schrieb:

    Sofern die Ergebnisse in einer Variablen (Typ spielt keine Rolle) von verschiedenen Threads aus gespeichert werden, sollte unbedingt der Zugriff via get- und set-Methode gesteuert werden.
    Wäre hierfür nicht NSLock prädestiniert?
    Bei der Verwendung von NSLock muss man sich immer darauf besinnen, dass nur der Thread den Lock aufheben darf, welcher diesen auch gesetzt hat. :rolleyes:

    Das erspare ich mir lieber. Aber es führen ja bekanntlich viele Wege nach Rom. Mein Fazit ist kein MUSS sondern ein KANN. :thumbup:

    Also kann Dein Hinweis bestimmt für den ein oder andern hier hilfreich sein. :thumbsup:
  • OSXDev schrieb:

    In meiner Literatur finde ich nichts zu dem Thema Semaphores. Bevor ich mich hier auf die Suche begebe, wollte ich mal nachfragen ob Du mir eine gute Seite hierfür empfehlen kannst bzw. evtl. den Link posten könntest.
    Das brauchst du auch nicht unbedingt. Ja, ist bisschen Gefrickel mit den Callbacks, das bekommt man aber mit bisschen Übung gut hin.
  • matz schrieb:

    OSXDev schrieb:

    In meiner Literatur finde ich nichts zu dem Thema Semaphores. Bevor ich mich hier auf die Suche begebe, wollte ich mal nachfragen ob Du mir eine gute Seite hierfür empfehlen kannst bzw. evtl. den Link posten könntest.
    Das brauchst du auch nicht unbedingt. Ja, ist bisschen Gefrickel mit den Callbacks, das bekommt man aber mit bisschen Übung gut hin.

    @matz: Danke für Deinen Zuspruch. Manchmal kann ich die Begriffen nicht wirklich einsortieren, dann hilft es mir den Sachverhalt auf einer "guten" Seite kurz nachzulesen. Ein, zwei kleinere Testapps zu diesem Thema geschrieben und schon konnte ich es im produktiven Code anwenden. Eine spitzen Sache diese Semaphoren. :thumbsup:
  • Chris schrieb:

    matz schrieb:

    OSXDev schrieb:

    Eine spitzen Sache diese Semaphoren.
    Bin ich mir nicht so sicher.
    Semaphoren ohne Timeout können eine Quelle der Freude sein.
    Ich kenne dieses Thema noch aus meinen Assmblerzeiten und kann Dir zustimmen.

    Wer jedoch ein paar Regeln diesbzgl. beachtet, wird viel Freude damit ernten. Ist jedoch auch eine Frage der Problemstellung welches es zu lösen gilt.

    Viele Wege führen zum Ziel.
  • Ich habe hier noch einen Hinweis für jene, welche sich mit dem Thema Semaphoren auseinandersetzen wollen. Bitte nicht alleine auf die erzeugten Ausgaben ein Augenmerk legen. Denn diese spiegeln i. d. R. nicht unbedingt die Prozessbearbeitungskette wieder.

    Besser ist es sich die Threadnummer bzw. -namen der aktuell laufenden Methode auszugeben. Mit dieser Orientierungshilfe gelingt es normalerweise sehr leicht die Abarbeitung nachzuvollziehen.

    Zum Beispiel so:

    Quellcode

    1. print("\n\n\tRunning thread (name is \(#function)) and it's memory address: \(Thread.current)")

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von OSXDev ()