We all know that Microsoft always delivers awesome features in all the releases and they are already planning for the features of C# 8.0
As per a video on Channel 9, Mads Torgersen has explained about the possible features of C# 8.0
There are possibly 4 features till now which are as below:
- Nullable reference types
- Async Streams(Foreach Async)
- Default Interface Implementations
- Extension Everything
In this post, I will explain about the Async Streams.
For normal Async methods we write it as below:
async Task(int) Test()
{
int x = 1;
return x;
}
and we call it by:
await Test();
What it does is, it waits until the things returned from Test method and after that only, it goes to the next step.
But it works with only one resource.
Now imagine we want to work with some live stream where we get data in the continuous live stream. For example, some IoT where data comes every moment. But we want to process them in our own time like one at a time.
Here comes the Async version of IEnumerable:
IAsyncEnumerable<T>
So basically, it is just like an enumerable except that when you move next in an enumerable way, that is Async.
It is kind of a way of Lay loading enumerability in Async way.
When defining an async iterator, you would use this function signature:
async IAsyncEnumerable<string> MethodName()
{
yield return "Test";
}
And can be used as:
foreach await (string s in asyncStream)
Above is nothing but the combination of Async and Enumerable, you wait inside it and you return inside it.
Though it looks like IObersable but it is different. The benefit of using this instead of IObservable<T> from Reactive Extensions is that the consumer controls the flow rate. This is referred to as a “pull model” and IObservable<T> is a “push model”.
In Foreach Async, consumers tell when it is ready and then it processes the next one.
I hope you liked this future feature of C#.
One thought on “Async Streams : C# 8.0 expected features Part – I”