def readBlock(pieceIndex, offset, length)
      id = returnAndIncrRequestId
      return id if @state == :after_stop
      @requests.push [id, :read_block, pieceIndex, offset, length]
      @requestsSemaphore.signal
      id
    end
def readBlock(pieceIndex, offset, length)
      id = returnAndIncrRequestId
      return id if @state == :after_stop
      @requests.push [id, :read_block, pieceIndex, offset, length]
      @requestsSemaphore.signal
      id
    end
Read a block from the torrent asynchronously. When the operation
 is complete the result is stored in the 'results' list.
 This method returns an id that can be used to match the response
 to the request.
 The readBlock and writeBlock methods are not threadsafe with respect to callers;
 they shouldn't be called by multiple threads concurrently.