def METHOD_NAME(self, key: K) -> Awaitable[T]:
    if self.cache:
        future = self.cache_map.get(key)
        if future and not future.cancelled():
            return future
    future = self.loop.create_future()
    if self.cache:
        self.cache_map.set(key, future)
    batch = get_current_batch(self)
    batch.add_task(key, future)
    return future