Nesting IAsyncEnumerable
There are several things worth considering when you are about to design an API, which should either return an IAsyncEnumerable&lt;IAsyncEnumerable&lt;T&gt;&gt; or return an IAsyncEnumerable&lt;T&gt;

IAsyncEnumerable &lt; IAsyncEnumerable &lt; T > >

Pros


It is flexible from the consumer point of view. It allows you to use a single or multiple consumer model
In case of multiple consumers the throughput can be higher, because the parallel processing potential
It allows to use different Timeouts for different providers
It allows custom code injection between two yield return statements


Cons


In case of single consumer the ingestion logic can be a bit more complicated (compared to the flatten version)
Nested async loops can complicate the exception handling logic (and also the debugging)


IAsyncEnumerable &lt; T >

Pros


It is easier to use for a single consumer
If the multiple provider model is just an implementation detail then it can hide this information behind a good abstraction
It provides easier error handling capabilities


Cons


It is harder to support multiple consumers model
It is harder to inject custom code between yield returns
Spanning new processing based on different providers is impossible 


If you are considering to provide a flattened API then I would suggest to check that package, which is called System.Interactive.Async. Inside this package there is a class called AsyncEnumerableEx which defines a Merge function.