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

时间:2018-08-04 12:40:52

标签: ios swift swift3 ios7

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

我对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()

2 个答案:

答案 0 :(得分:0)

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

如果您想先完成第二项任务,只需交换任务顺序即可。

    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()

答案 1 :(得分:-1)

是的,可以使用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.

任何有疑问的评论。