### 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
short_description: Executes tasks in a linear fashion
    description:
        - Task execution is in lockstep per host batch as defined by C(serial) (default all).
          Up to the fork limit of hosts will execute each task at the same time and then
          the next series of hosts until the batch is done, before going on to the next task.
    version_added: "2.0"
    notes:
     - This was the default Ansible behaviour before 'strategy plugins' were introduced in 2.0.
    author: Ansible Core Team
'''
from ansible import constants as C
from ansible.errors import AnsibleError, AnsibleAssertionError, AnsibleParserError
from ansible.executor.play_iterator import IteratingStates, FailedStates
from ansible.module_utils.common.text.converters import to_text
from ansible.playbook.handler import Handler
from ansible.playbook.included_file import IncludedFile
from ansible.playbook.task import Task
from ansible.plugins.loader import action_loader
from ansible.plugins.strategy import StrategyBase
from ansible.template import Templar
from ansible.utils.display import Display
display = Display()
class StrategyModule(StrategyBase):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        
        self._in_handlers = False
    def _get_next_task_lockstep(self, hosts, iterator):
        '''
        Returns a list of (host, task) tuples, where the task may