<div dir="ltr">Hello Swift,<div><br></div><div>I&#39;ve been trying out Swift as a general utility language on the server (replacing Ruby or Node). I&#39;m trying to write a simple image retriever via HTTP as a learning project.</div><div><br></div><div>Inspired by this [gist][], I&#39;ve written the following:</div><div><br></div><div><div><font face="monospace, monospace">let queue = DispatchQueue.global(qos: .background)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">let sessionConfiguration = URLSessionConfiguration.<wbr>default</font></div><div><font face="monospace, monospace">let session = URLSession(configuration: sessionConfiguration)</font></div><div><br></div><div><font face="monospace, monospace">print(&quot;staring sync&quot;)</font></div><div><font face="monospace, monospace">queue.async(execute: {</font></div><div><font face="monospace, monospace">    print(&quot;&gt;&gt;&gt; [\(queue.label)]: At the queue start&quot;)</font></div><div><font face="monospace, monospace">    print(&quot;x&quot;)</font></div><div><font face="monospace, monospace">    let task = session.dataTask(with: URL(string: &quot;<a href="http://google.com" target="_blank">http://google.com</a>&quot;)!, completionHandler: {</font></div><div><font face="monospace, monospace">        (data, response, error) in</font></div><div><font face="monospace, monospace">        print(&quot;Task ran!&quot;)</font></div><div><font face="monospace, monospace">    })</font></div><div><font face="monospace, monospace">    print(&quot;y&quot;)</font></div><div><font face="monospace, monospace">    task.resume()</font></div><div><font face="monospace, monospace">    print(&quot;z&quot;)</font></div><div><font face="monospace, monospace">})</font></div><div><font face="monospace, monospace">print(&quot;ending sync&quot;)</font></div></div><div><br></div><div>With output:</div><div><br></div><div><div><font face="monospace, monospace">staring sync</font></div><div><font face="monospace, monospace">ending sync</font></div></div><div><br></div><div>or...</div><div><br></div><div><div><font face="monospace, monospace">staring sync</font></div><div><font face="monospace, monospace">ending sync</font></div><div><font face="monospace, monospace">&gt;&gt;&gt; [com.apple.root.background-qos]: At the queue start</font></div><div><font face="monospace, monospace">x</font></div><div><font face="monospace, monospace">y</font></div><div><font face="monospace, monospace">y</font></div><div><font face="monospace, monospace">z</font></div></div><div><br></div><div>Whoa.</div><div><br></div><div>At this point I&#39;m going to have to confess that I need some help clarifying my model.</div><div><br></div><div>1. How did point &quot;y&quot; get fired twice? Or how did it happen not at all?</div><div><br></div><div>2. How did my callback for dataTask *never* fire? Even if the connection task *failed* the handler ought have fired, no?</div><div><br></div><div>3. I didn&#39;t want to bring this whole queue business into the picture, but it appears that without it the program exits before the handler has a chance to fire.</div><div><br></div><div>4. Changing to a queue.sync from queue.async consistently produces the output I expect, but does not fire my <font face="monospace, monospace">completionHandler</font> still.</div><div><br></div><div>5. Is there a canonical reference for doing this simplest of tasks?</div><div><br></div><div>Thanks for the help,</div><div><br></div><div>Steven</div><div><br></div><div>References:</div><div><br></div><div>[gist]: <a href="https://gist.github.com/stinger/71000c4d5fb4a25fb7686bae116df0a5" target="_blank">https://gist.github.<wbr>com/stinger/<wbr>71000c4d5fb4a25fb7686bae116df0<wbr>a5</a></div></div>