The difference between both is that async* will always return a Stream and offer some syntax sugar to emit a value through the yield keyword . async gives you a Future and async* gives you a Stream. When users marks a function as async or async* allows it to use async/await keyword to use a Future.