def METHOD_NAME(self, slot, subindex, roi, result):
    clipped_block_rois = getIntersectingRois(
        self.Input.meta.shape, self.BlockShape.value, (roi.start, roi.stop), True
    )
    if self._always_request_full_blocks:
        full_block_rois = getIntersectingRois(
            self.Input.meta.shape, self.BlockShape.value, (roi.start, roi.stop), False
        )
    else:
        full_block_rois = clipped_block_rois
    pool = RequestPool()
    for full_block_roi, clipped_block_roi in zip(full_block_rois, clipped_block_rois):
        full_block_roi = numpy.asarray(full_block_roi)
        clipped_block_roi = numpy.asarray(clipped_block_roi)
        req = self.Input(*full_block_roi)
        output_roi = numpy.asarray(clipped_block_roi) - roi.start
        if (full_block_roi == clipped_block_roi).all():
            req.writeInto(result[roiToSlice(*output_roi)])
        else:
            roi_within_block = clipped_block_roi - full_block_roi[0]
            def copy_request_result(output_roi, roi_within_block, request_result):
                self.Output.stype.copy_data(
                    result[roiToSlice(*output_roi)], request_result[roiToSlice(*roi_within_block)]
                )
            req.notify_finished(partial(copy_request_result, output_roi, roi_within_block))
        pool.add(req)
        del req
    pool.wait()