如何在ios swift中执行另一个datatask线程时暂停datatask线程一段时间?

如何在ios swift中执行另一个datatask线程时暂停datatask线程一段时间?,ios,swift,swift3,ios7,Ios,Swift,Swift3,Ios7,我想暂停datatask one,直到第二个datatask完成。如何停止第一个datatask。下面是我的代码,在datatask one中,我再次启动了第二个datatask,但我想停止datatask one 我对ios swift编程非常陌生,所以请告诉我这个问题,或者你可以给出一些替代方法来解决这个问题。提前谢谢 let firsttask = URLSession.shared.dataTask(with: request) {data, response, error in

我想暂停datatask one,直到第二个datatask完成。如何停止第一个datatask。下面是我的代码,在datatask one中,我再次启动了第二个datatask,但我想停止datatask one

我对ios swift编程非常陌生,所以请告诉我这个问题,或者你可以给出一些替代方法来解决这个问题。提前谢谢

    let firsttask = URLSession.shared.dataTask(with: request) {data, response, error in
{
       // There is some logic but after this I started below second task


          let secondtask = URLSession.shared.dataTask(with: request) {data, response, error in
           //some logic
            }secondtask.resume()

  }firsttask.resume()

当您的第一个任务完成它的例程(请求)时,就会调用completion closure。这意味着您的第一个任务不再是下载任何内容,并且与服务器的连接已关闭。因此,在这一点上,您无法停止第一个任务

如果要先完成第二个任务,只需交换任务的顺序即可

    let secondtask = URLSession.shared.dataTask(with: request) {data, response, error in
    {
       // There is some logic but after this I started below second task

            let firsttask = URLSession.shared.dataTask(with: request) {data, response, error in
           //some logic
            } firsttask.resume()

    }secondtask.resume()

是的,使用DispatchSemaphore可以实现这一点。检查下面的代码用法

var sem = DispatchSemaphore(value: 0) // Create a semaphore

let secondtask = URLSession.shared.dataTask(with: request) {data, response, error in
    {
       // There is some logic but after this I started below second task

            let firsttask = URLSession.shared.dataTask(with: request) {data, response, error in
           //some logic

           self.sem.signal() // Give signal to semaphore after completing 2nd task.

            } firsttask.resume()

    }secondtask.resume()

_ = sem.wait(timeout: .distantFuture) // wait or halt your thread.

如有任何疑问,请发表评论。

请搜索或类似信息。您需要一个完成处理程序。这个问题已经被问了很多次了。我不能这么做,因为第一个任务中有一些逻辑,第二个任务需要启动。那么有没有其他方法来做这件事???我不能交换任务。还有其他方法吗?你说我不能交换任务是什么意思?在上面的代码中,你的数据任务1将被调用,然后在完成数据任务1时,你的第二个任务将开始执行,然后当你的第二个任务结束时,你的控制权将被释放。