async def METHOD_NAME(self, size=None):
    fsize = await self.size()
    if not size:
        size = fsize
    def next_block():
        current = fsize
        while (current - self.chunk_size) > (fsize - size):
            current -= self.chunk_size
            yield current
    for pos in next_block():
        yield await self._get_chunk(pos)
    yield await self._get_chunk(fsize - size, size % self.chunk_size)