Fix repeated use of synchronous backend
Once cancelled, _protocol is generally nil, which is fine
Better handle cancellations, particularly with synchronous backend