All, Thanks for all your help thus far. I'll have some time this weekend to try things out but wanted to let you know that I'm only using Linux-native tools: vim, swift binary from the command line.
To this end: meaningful error messages, friendly API documentation, comparability to Python / Node / Ruby for interacting with the web etc. are all the things I'm investigating. Apparently a task that's come up is friendliness around coding around the asynchrony model ;) Thanks for the suggestions, I'll work through them soon and report back. On Thu, Oct 27, 2016 at 6:32 PM, Dave Abrahams via swift-users < swift-users@swift.org> wrote: > > Pasting a reply on behalf of Matt Wright (cc'd): > > > On Oct 27, 2016, at 1:57 PM, Dave Abrahams <dabrah...@apple.com> wrote: > > > > > > From: Steven Harms via swift-users <swift-users@swift.org> > > Subject: [Swift3][Linux][URLSession]: Core dump when trying to make > simple HTTP request > ...<schnipp 40>... > > Date: October 27, 2016 at 5:01:58 AM PDT > > To: swift-users@swift.org > > Reply-To: Steven Harms <sgha...@stevengharms.com> > > > > > > Hello Swift, > > > > I've been trying out Swift as a general utility language on the server > (replacing Ruby or Node). I'm trying to write a simple image retriever via > HTTP as a learning project. > > > > Inspired by this [gist][], I've written the following: > > > > let queue = DispatchQueue.global(qos: .background) > > > > let sessionConfiguration = URLSessionConfiguration.default > > let session = URLSession(configuration: sessionConfiguration) > > > > print("staring sync") > > queue.async(execute: { > > print(">>> [\(queue.label)]: At the queue start") > > print("x") > > let task = session.dataTask(with: URL(string: "http://google.com")!, > completionHandler: { > > (data, response, error) in > > print("Task ran!") > > }) > > print("y") > > task.resume() > > print("z") > > }) > > print("ending sync") > > > > With output: > > > > staring sync > > ending sync > > > > or... > > > > staring sync > > ending sync > > >>> [com.apple.root.background-qos]: At the queue start > > x > > y > > y > > z > > > > Whoa. > > > > At this point I'm going to have to confess that I need some help > clarifying my model. > > > > 1. How did point "y" get fired twice? Or how did it happen not at all? > > The double-fire is something I can’t immediately come up with an > explanation. It might be specific to the Linux dispatch > implementation, which I’m not well versed on but it’s very strange > that it would print twice. Not firing at all is likely because his > snippet of code exited before the work was run on another thread. The > “main” thread here either has to wait for the session work to finish > explicitly, or call dispatch_main() to cede control of the main thread > to the system (and subsequently exit out of the tool somewhere else). > > > 2. How did my callback for dataTask *never* fire? Even if the connection > task *failed* the handler > ought have fired, no? > > Likely similar to (1), though if URLSession uses runloops (Linux?) > then it could also be because the runloop was never run anywhere. On > Darwin I’d suspect the runloop for URLSession wasn’t running, I don’t > know how it works on Linux. > > > 3. I didn'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. > > Probably similar to the issues in (1) and (2). If the snippet exits after > running then a lot of this > asynchronously scheduled work will never happen. > > > 4. Changing to a queue.sync from queue.async consistently produces the > output I expect, but does > not fire my completionHandler still. > > This forces the queue.sync to run in-line (on the current thread) but > the snippet will then likely still exit before anything happens to > cause the URLSession to finish. > > -- > -Dave > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users >
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users