Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift2 Swift 2如何在继续之前强制执行会话数据任务。resume()_Swift2_Nsurlsession_Nsurlsessiondatatask - Fatal编程技术网

Swift2 Swift 2如何在继续之前强制执行会话数据任务。resume()

Swift2 Swift 2如何在继续之前强制执行会话数据任务。resume(),swift2,nsurlsession,nsurlsessiondatatask,Swift2,Nsurlsession,Nsurlsessiondatatask,在会话dataTaskWithRequest完成之前,我想弄清楚如何阻止其余代码执行,我会发疯的。无论我做什么,数据任务都不会.resume(),直到所有其他任务都完成。什么都不管用。不使用while循环。不将任务放在单独的线程中(dispatch\u async)。我束手无策。更糟糕的是,我觉得我忽略了一些简单的事情,因为似乎没有人问这个问题 NSURLSession是一个异步加载系统。当您告诉它开始时,它开始在自己的线程中获取数据,并且您的代码继续运行。如果希望代码在请求返回数据后执行,最简

在会话dataTaskWithRequest完成之前,我想弄清楚如何阻止其余代码执行,我会发疯的。无论我做什么,数据任务都不会.resume(),直到所有其他任务都完成。什么都不管用。不使用while循环。不将任务放在单独的线程中(dispatch\u async)。我束手无策。更糟糕的是,我觉得我忽略了一些简单的事情,因为似乎没有人问这个问题

NSURLSession是一个异步加载系统。当您告诉它开始时,它开始在自己的线程中获取数据,并且您的代码继续运行。如果希望代码在请求返回数据后执行,最简单的方法是将代码放入完成处理程序块(通过调用dataTaskWithRequest:completionHandler:)中。

NSURLSession是一个异步加载系统。当您告诉它开始时,它开始在自己的线程中获取数据,并且您的代码继续运行。如果您想让代码在请求返回数据之后执行,最简单的方法是将该代码放入完成处理程序块(通过调用dataTaskWithRequest:completionHandler:)中。

看看本文。我认为您正在寻找派遣组进入/离开来解决您的问题。请参阅本文。我认为您正在寻找派遣组进入/离开来解决您的问题。再见,对不起。我应该澄清一下。我在完成处理程序中有请求和响应。在该块之后,我有task.resume(),然后我有一个条件循环,该循环将继续,直到任务的状态为.Completed。问题是,由于块在其他所有操作完成之前不会执行,因此while循环无限运行,从不在任务内执行请求。会话本身通常在调度完成块的同一运行循环/调度队列上执行这些完成块。你通过在while循环中旋转来阻止跑步循环。不要那样做。将while循环后面的代码放入完成处理程序块,并完全丢弃while循环。让方法返回,使主运行循环处于空闲状态。这不仅可以解决问题,而且还可以减少电池的使用,因为旋转等待变量改变会浪费大量的CPU周期。但底线在哪里?当你在完成块后说剩下的代码时,那就是我剩下的代码,这是很多。.resume()在执行任务的线程之前等待什么?根据我的经验,我无法在任务块之后有任何代码,否则任务在其他所有任务完成之前不会执行。任务可能正在执行,但在方法返回之前它无法将数据返回到程序,因为方法仍在运行,占用了主线程,因此NSURLSession无法运行完成处理程序块。在调用resume之后,应该在该方法的其余部分执行很少的操作,尽快返回控制,以便主运行循环不再繁忙,完成处理程序块可以运行。(或者,您可以使用
sessionWithConfiguration:delegate:delegateQueue
在不同的队列上运行完成块,但我不建议使用这种方法。)这开始变得更有意义了。那么.resume等待的块之外的代码仅限于它所驻留的函数?只要函数中没有其他代码,不管函数调用后有更多代码,都会返回响应?抱歉。我应该澄清一下。我在完成处理程序中有请求和响应。在该块之后,我有task.resume(),然后我有一个条件循环,该循环将继续,直到任务的状态为.Completed。问题是,由于块在其他所有操作完成之前不会执行,因此while循环无限运行,从不在任务内执行请求。会话本身通常在调度完成块的同一运行循环/调度队列上执行这些完成块。你通过在while循环中旋转来阻止跑步循环。不要那样做。将while循环后面的代码放入完成处理程序块,并完全丢弃while循环。让方法返回,使主运行循环处于空闲状态。这不仅可以解决问题,而且还可以减少电池的使用,因为旋转等待变量改变会浪费大量的CPU周期。但底线在哪里?当你在完成块后说剩下的代码时,那就是我剩下的代码,这是很多。.resume()在执行任务的线程之前等待什么?根据我的经验,我无法在任务块之后有任何代码,否则任务在其他所有任务完成之前不会执行。任务可能正在执行,但在方法返回之前它无法将数据返回到程序,因为方法仍在运行,占用了主线程,因此NSURLSession无法运行完成处理程序块。在调用resume之后,应该在该方法的其余部分执行很少的操作,尽快返回控制,以便主运行循环不再繁忙,完成处理程序块可以运行。(或者,您可以使用
sessionWithConfiguration:delegate:delegateQueue
在不同的队列上运行完成块,但我不建议使用这种方法。)这开始变得更有意义了。那么.resume等待的块之外的代码仅限于它所驻留的函数?只要函数中没有其他代码,不管函数调用后有更多代码,都会返回响应?