【问题标题】:Can a URLSessionStreamTask be used for both reading and writing?URLSessionStreamTask 可以同时用于读写吗?
【发布时间】:2018-02-06 10:10:40
【问题描述】:

在我的URLProtocol 子类的startLoading 方法中,我创建了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.}

流任务只能用于一次 I/O 调用吗?还是只是写作或只是阅读?或者是否有一些我忘记在写入和读取之间调用的模式切换功能?会不会有别的问题?

【问题讨论】:

    标签: cocoa nsurlsession nsurlsessiontask


    【解决方案1】:

    尝试在写入streamTask之前添加读块操作。读写是异步调用,等待超时发生。 在您的示例中,您发送一个带有写入的命令,我猜它会很快接收并回答,然后再将读取添加到任务中完成。所以你永远看不到你的回应。

    【讨论】:

      猜你喜欢
      • 2018-02-05
      • 2014-06-17
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多