Можно ли использовать 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. Чтение и запись - это асинхронные вызовы, ожидающие истечения времени ожидания. В вашем примере вы отправляете команду с записью, я думаю, она очень быстро получает и отвечает, прежде чем добавить чтение в задачу. Таким образом, вы никогда не увидите свой ответ.

Другие вопросы по тегам