### Summary

I have a problem with `any_errors_fatal: True` command. In plain playbook it seems to work by default, but it doesn't work when i'm using roles with block / rescue. I'm doing some assert statements and after one of assert statements fails, the playbook still continues with other hosts in the same play. I expect that it would stop after experiencing any fatal error (any assert statement fail).

Even Ansible version is not the newest, but the same behaviour is on Ansible 2.15

### Issue Type

Bug Report

### Component Name

any_errors_fatal with rescue / block

### Ansible Version

```console
ansible [core 2.12.10]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.8.10 (default, Mar 13 2023, 10:26:41) [GCC 9.4.0]
  jinja version = 2.10.1
  libyaml = True
```

### Configuration

```console
root@PCEDVKAIL3:/etc/ansible# ansible-config dump --only-changed -t all
HOST_KEY_CHECKING(/etc/ansible/ansible.cfg) = False

BECOME:
======

CACHE:
=====

CALLBACK:
========

CLICONF:
=======

CONNECTION:
==========

paramiko_ssh:
____________
host_key_checking(/etc/ansible/ansible.cfg) = False

ssh:
___
host_key_checking(/etc/ansible/ansible.cfg) = False

HTTPAPI:
=======

INVENTORY:
=========

LOOKUP:
======

NETCONF:
=======

SHELL:
=====

VARS:
====
root@PCEDVKAIL3:/etc/ansible#
```


### OS / Environment

Centos 7

### Steps to Reproduce

<!--- Paste example playbooks or commands between quotes below -->


**Roles Playbook without block/rescue:**

```
- hosts: TEONET01A,TEONET01B
  gather_facts: false
  any_errors_fatal: True
  roles:
    - test
	
Roles (block commented):

---
#  - name: Run test pbook
#    block:
    - assert:
        that:
          - ansible_hostname == 'TEONET01A'
    - debug:
        msg: In role

#    rescue:
#    - debug:
#        msg: Rescue

```
Runs as expected and play exists after fatal error in assert:

```
root@PCEDVKAIL3:/etc/ansible# ansible-playbook playbook.yml

PLAY [TEONET01A,TEONET01B] ***************************************************************************************************************************************************************************************************************************************************************

TASK [test : assert] *********************************************************************************************************************************************************************************************************************************************************************
[WARNING]: ansible-pylibssh not installed, falling back to paramiko
ok: [10.8.250.46] => {
    "changed": false,
    "msg": "All assertions passed"
}
[WARNING]: ansible-pylibssh not installed, falling back to paramiko
fatal: [10.8.250.47]: FAILED! => {
    "assertion": "ansible_hostname == 'TEONET01A'",
    "changed": false,
    "evaluated_to": false,
    "msg": "Assertion failed"
}

NO MORE HOSTS LEFT ***********************************************************************************************************************************************************************************************************************************************************************

PLAY RECAP *******************************************************************************************************************************************************************************************************************************************************************************
10.8.250.46                : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
10.8.250.47                : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
```

**Now how it works with block/rescue - seems like bug**

same playbook:
```
- hosts: TEONET01A,TEONET01B
  gather_facts: false
  any_errors_fatal: True
  roles:
    - test

Roles (block uncommented):

---
  - name: Run test pbook
    block:
    - assert:
        that:
          - ansible_hostname == 'TEONET01A'
    - debug:
        msg: In role

    rescue:
    - debug:
        msg: Rescue
		
```
Runs as not expected and play continues with other host even the host assert fails:

```
root@PCEDVKAIL3:/etc/ansible# ansible-playbook playbook.yml

PLAY [TEONET01A,TEONET01B] ***************************************************************************************************************************************************************************************************************************************************************

TASK [test : assert] *********************************************************************************************************************************************************************************************************************************************************************
[WARNING]: ansible-pylibssh not installed, falling back to paramiko
ok: [10.8.250.46] => {
    "changed": false,
    "msg": "All assertions passed"
}
[WARNING]: ansible-pylibssh not installed, falling back to paramiko
fatal: [10.8.250.47]: FAILED! => {
    "assertion": "ansible_hostname == 'TEONET01A'",
    "changed": false,
    "evaluated_to": false,
    "msg": "Assertion failed"
}

TASK [test : debug] **********************************************************************************************************************************************************************************************************************************************************************
ok: [10.8.250.46] => {
    "msg": "In role"
}

TASK [test : debug] **********************************************************************************************************************************************************************************************************************************************************************
ok: [10.8.250.47] => {
    "msg": "Rescue"
}

PLAY RECAP *******************************************************************************************************************************************************************************************************************************************************************************
10.8.250.46                : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
10.8.250.47                : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=1    ignored=0
```



### Expected Results

playbook should stop when any of the hosts experiences error.

### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
variable_manager=self._variable_manager
                )
                if len(included_files) > 0:
                    display.debug("we have included files to process")
                    display.debug("generating all_blocks data")
                    all_blocks = dict((host, []) for host in hosts_left)
                    display.debug("done generating all_blocks data")
                    included_tasks = []
                    failed_includes_hosts = set()
                    for included_file in included_files:
                        display.debug("processing included file: %s" % included_file._filename)
                        is_handler = False
                        try:
                            if included_file._is_role:
                                new_ir = self._copy_included_file(included_file)
                                new_blocks, handler_blocks = new_ir.get_block_list(
                                    play=iterator._play,
                                    variable_manager=self._variable_manager,
                                    loader=self._loader,
                                )
                            else:
                                is_handler = isinstance(included_file._task, Handler)
                                new_blocks = self._load_included_file(included_file, iterator=iterator, is_handler=is_handler)
                            
                            
                            iterator.handlers = [h for b in iterator._play.handlers for h in b.block]
                            display.debug("iterating over new_blocks loaded from include file")
                            for new_block in new_blocks:
                                if is_handler:
                                    for task in new_block.block: