我在我的 RubyMotion 应用程序中这样做:
Dispatch::Queue.concurrent('google').async {
BubbleWrap::HTTP.get("http://google.com") do |response|
p response.body.to_str
end
}
此调用未完成。
但是,如果我将 BubbleWrap 代码放在 Dispatch 队列之外,它就可以正常完成。
我在我的 RubyMotion 应用程序中这样做:
Dispatch::Queue.concurrent('google').async {
BubbleWrap::HTTP.get("http://google.com") do |response|
p response.body.to_str
end
}
此调用未完成。
但是,如果我将 BubbleWrap 代码放在 Dispatch 队列之外,它就可以正常完成。
BubbleWrap::HTTP
是 over 的抽象NSURLConnection
,它依赖于RunLoop进行异步处理。不幸的是,没有在 GCD 队列上设置 RunLoop,而且我还没有弄清楚如何在 GCD 队列上启动 runloop。当我需要上述内容时,我求助于实例化一个 new NSThread
,并手动启动了运行循环:
action = lambda do
runLoop = NSRunLoop.currentRunLoop
BW::HTTP.get("http://www.google.com") do |response|
NSLog("Fetched Google!")
end
runLoop.run
end
thread = NSThread.alloc.initWithTarget action, selector:"call", object:nil
thread.start
这个答案是我关于同一主题的博文和Cocoa In The Shell 的重述