An async-iterator method is replaced by a kick-off method, which initializes a state machine. It does not start running the state machine (unlike kick-off methods for regular async method).
The kick-off method method is marked with both `AsyncStateMachineAttribute` and `IteratorStateMachineAttribute`.
The kick-off method method is marked with `AsyncIteratorStateMachineAttribute`.
The state machine for an enumerable async-iterator method primarily implements `IAsyncEnumerable<T>` and `IAsyncEnumerator<T>`.
For an enumerator async-iterator, it only implements `IAsyncEnumerator<T>`.
// (6,33): error CS8412: Asynchronous foreach requires that the return type 'C.Enumerator' of 'C.GetAsyncEnumerator(CancellationToken)' must have a suitable public 'MoveNextAsync' method and public 'Current' property
// (6,33): error CS8412: Asynchronous foreach requires that the return type 'C' of 'GetAsyncEnumerator' must have a suitable public 'MoveNextAsync' method and public 'Current' property
// (6,33): error CS8412: Asynchronous foreach requires that the return type 'C.Enumerator' of 'C.GetAsyncEnumerator(CancellationToken)' must have a suitable public 'MoveNextAsync' method and public 'Current' property
// (6,33): error CS8412: Asynchronous foreach requires that the return type 'C' of 'GetAsyncEnumerator' must have a suitable public 'MoveNextAsync' method and public 'Current' property