async def METHOD_NAME(
    self,
    app_config: AppConfig,
    max_migration_id: t.Optional[str] = None,
    offset: int = 0,
) -> t.List[MigrationManager]:
    """
    Call the forwards coroutine in each migration module. Each one should
    return a `MigrationManger`. Combine all of the results, and return in
    a list.
    :param max_migration_id:
        If set, only MigrationManagers up to and including the given
        migration ID will be returned.
    """
    migration_managers: t.List[MigrationManager] = []
    migrations_folder = app_config.migrations_folder_path
    migration_modules: t.Dict[
        str, MigrationModule
    ] = self.get_migration_modules(migrations_folder)
    migration_ids = sorted(migration_modules.keys())
    for migration_id in migration_ids:
        migration_module = migration_modules[migration_id]
        response = await migration_module.forwards()
        if isinstance(response, MigrationManager):
            migration_managers.append(response)
            if (
                max_migration_id
                and response.migration_id == max_migration_id
            ):
                break
    if offset > 0:
        raise Exception(
            "Positive offset values aren't currently supported"
        )
    elif offset < 0:
        return migration_managers[:offset]
    else:
        return migration_managers