取消URLSessionStreamTask永远不会使用NSURLErrorCancelled调用completionHandler(在macOS上)

时间:2016-08-09 04:32:33

标签: swift macos nsurlsession osx-elcapitan

我在localhost上有一个简单的操场和一个简单的TCP服务器。我想要做的就是取消已经排队的readData操作的URLSessionStreamTask。令人抓狂的是,这个精确的游乐场适用于iOS或tvOS,但不适用于macOS。

在iOS / tvOS上,我得到以下输出:

Resuming...
Cancelling...
After cancel call
Victory! The session task was properly cancelled!

在macOS(10.11)上“胜利!”消息永远不会被打印出来。

这是游乐场:

import Foundation
import PlaygroundSupport

let task = URLSession.shared.streamTask(withHostName: "localhost", port: 12345)

task.readData(ofMinLength: 1, maxLength: 1024, timeout: 0) { (data, atEOF, error) in
    if let error = error as? NSError {
        if error.code == NSURLErrorCancelled {
            print("Victory! The session task was properly cancelled!")
        }
    }
}

print("Resuming...")
task.resume()

print("Cancelling...")
task.cancel()
print("After cancel call")
PlaygroundPage.current.needsIndefiniteExecution = true

我在这里遗漏了什么吗?我正在使用XCode 8(beta 4)。任何帮助深表感谢。感谢。

1 个答案:

答案 0 :(得分:0)

我确定现在已经老了,但在10.12之下,这似乎工作正常。

Resuming...
Cancelling...
After cancel call
Victory! The session task was properly cancelled!