Можно ли использовать URLSessionStreamTask для чтения и записи?
В startLoading
метод моего URLProtocol
подкласс, я создаю URLSession
а также URLSessionStreamTask
, я 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.}
Можно ли использовать потоковое задание только для одного вызова ввода-вывода? Или только пишу или просто читаю? Или есть какая-то функция переключения режимов, которую я забыл вызвать между записью и чтением? Может ли быть другая проблема?
1 ответ
Попробуйте добавить операцию чтения блока перед записью в streamTask. Чтение и запись - это асинхронные вызовы, ожидающие истечения времени ожидания. В вашем примере вы отправляете команду с записью, я думаю, она очень быстро получает и отвечает, прежде чем добавить чтение в задачу. Таким образом, вы никогда не увидите свой ответ.