URLSessionStreamTask可以用于读写吗?

时间:2017-08-29 04:50:05

标签: cocoa nsurlsession nsurlsessiontask

startLoading子类的URLProtocol方法中,我创建了URLSessionURLSessionStreamTask。我resume任务并添加BlockOperation来调用我的第一个交易方法。该方法使用URLSessionStreamTask.write。如果我没有收到错误,则使用我的第二个交易方法放置另一个BlockOperation。该方法使用URLSessionStreamTask.read,它总是超时。

错误看起来像:

Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x10945dff0 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=gopher://www.floodgap.com:80/GET%20/, NSErrorFailingURLKey=gopher://www.floodgap.com:80/GET%20/, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=The request timed out.}

stream-task只能用于一个I / O调用吗?或者只是写作或只是阅读?或者是否有一些模式切换功能我忘记在写和读之间调用?还有其他问题吗?

1 个答案:

答案 0 :(得分:0)

尝试在写入streamTask之前添加读取块操作。读取和写入是异步调用,等待超时发生。 在您的示例中,您发送了一条带有write的命令,我想它会很快收到并回答,然后再将read添加到任务中。因此,您永远看不到您的回应。