##### SUMMARY
Depending on the error that occurs when a block with rescue catches it, the play execution stops, and the playbook ends successfuly, but the next plays don't run. I was able to simulate it using `include_tasks`, but the task inside use a module with a wrong name (that can be provided by a user, so not something that I have control, because it might not be me running the play, the user may include and run custom tasks).

This is not a problem if the module with wrong name is in the main playbook file, because the playbook fails at compilation time, but when lazily loaded through an `include_tasks`, the task fails, the `rescue` (wrapping the `include_tasks`) catches the error successfully, but the next plays don't run, and the playbook ends successfuly.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
block

##### ANSIBLE VERSION
```paste below
ansible 2.10.5
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.6/dist-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.6.9 (default, Oct  8 2020, 12:12:24) [GCC 8.4.0]
```

##### CONFIGURATION
```paste below

```
(`ansible-config dump --only-changed` outputs nothing)

##### OS / ENVIRONMENT
Ubuntu 18.04 (docker container)

##### STEPS TO REPRODUCE

_hosts.yml:_
```yaml
[main]
localhost ansible_connection=local
```

_playbook.yml:_
```yaml
- name: Test 01
  hosts: main
  tasks:
    - block:
        - include_tasks: "test.yml"
      rescue:
        - debug:
            msg: "rescued"

    - debug:
        msg: "test 01"

- name: Test 02
  hosts: main
  tasks:
    - debug:
        msg: "test 02"

    - fail:
        msg: "end here"
```

**Works:**

_test.yml (gives an error, but works as expected):_
```yaml
- ansible.builtin.file:
    param: "value"
```

_Outputs:_
```ini
PLAY [Test 01] ************************************************************************************************************************

TASK [include_tasks] ******************************************************************************************************************
included: /main/dev/repos/cloud/test.yml for localhost

TASK [ansible.builtin.file] ***********************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Unsupported parameters for (ansible.builtin.file) module: param Supported parameters include: _diff_peek, _original_basename, access_time, access_time_format, attributes, follow, force, group, mode, modification_time, modification_time_format, owner, path, recurse, selevel, serole, setype, seuser, src, state, unsafe_writes"}

TASK [debug] **************************************************************************************************************************
ok: [localhost] => {
    "msg": "rescued"
}

TASK [debug] **************************************************************************************************************************
ok: [localhost] => {
    "msg": "test 01"
}

PLAY [Test 02] ************************************************************************************************************************

TASK [debug] **************************************************************************************************************************
ok: [localhost] => {
    "msg": "test 02"
}

TASK [fail] ***************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "end here"}

PLAY RECAP ****************************************************************************************************************************
localhost                  : ok=4    changed=0    unreachable=0    failed=1    skipped=0    rescued=1    ignored=0   
```

**Bug:**

_test.yml (gives an error, stops the next plays, ends the playbook successfully, as explained above):_
```yaml
- wrong.collection.module:
    param: "value"
```

_Outputs:_
```ini
PLAY [Test 01] ************************************************************************************************************************

TASK [include_tasks] ******************************************************************************************************************
fatal: [localhost]: FAILED! => {"reason": "couldn't resolve module/action 'wrong.collection.module'. This often indicates a misspelling, missing collection, or incorrect module path.\n\nThe error appears to be in '/main/dev/repos/cloud/test.yml': line 1, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- wrong.collection.module:\n  ^ here\n"}

TASK [debug] **************************************************************************************************************************
ok: [localhost] => {
    "msg": "rescued"
}

TASK [debug] **************************************************************************************************************************
ok: [localhost] => {
    "msg": "test 01"
}

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

##### EXPECTED RESULTS
The same as in the case that works.

##### ACTUAL RESULTS
Stop the next plays, even after being rescued, and end the playbook successfully (if I run `ansible-playbook playbook.yml && echo "success" || echo "error"` it gives an error (due to the `fail` task at the end) in the 1st case (that works), but success in the 2nd, and don't run the 2nd play).

be sent to hosts as quickly as they can be processed. This means that
        some hosts may finish very quickly if run tasks result in little or no
        work being done versus other systems.
        The algorithm used here also tries to be more "fair" when iterating
        through hosts by remembering the last host in the list to be given a task
        and starting the search from there as opposed to the top of the hosts
        list again, which would end up favoring hosts near the beginning of the
        list.
        '''
        
        last_host = 0
        result = self._tqm.RUN_OK
        
        workers_free = len(self._workers)
        self._set_hosts_cache(iterator._play)
        if iterator._play.max_fail_percentage is not None:
            display.warning("Using max_fail_percentage with the free strategy is not supported, as tasks are executed independently on each host")
        work_to_do = True
        while work_to_do and not self._tqm._terminated:
            hosts_left = self.get_hosts_left(iterator)
            if len(hosts_left) == 0:
                self._tqm.send_callback('v2_playbook_on_no_hosts_remaining')
                result = False
                break
            work_to_do = False        
            starting_host = last_host  
            
            host_results = []
            while True:
                host = hosts_left[last_host]