If I have nested async\* streams, exceptions do not appear to be catchable, which is counterintuitive.

An example:

```dart
void main() {
  getString().listen(print);
}

Stream<String> getString() async* {
  try {
    yield* asyncStarError();
    yield await asyncError();
  } catch (err) {
    yield 'Crash';
  }
}

Stream<String> asyncStarError() async* {
  throw Exception('A Stream error happened');
}

Future<String> asyncError() async {
  throw Exception('A Future error happened');
}

```

This outputs:

```
Uncaught Error: Exception: A Stream error happened
Crash

```

So the exception thrown by `asyncStarError` is not caught, while the Future is caught as expected. Can anyone explain why?

You can observe the behaviour in dartpad: <https://dartpad.dartlang.org>