Skip to content

Commit c80ea7e

Browse files
committed
Async Streams (csharp-8)
1 parent 2744787 commit c80ea7e

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>netcoreapp3.1</TargetFramework>
6+
</PropertyGroup>
7+
8+
</Project>

AsynchronousStreams/Program.cs

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Net.Http;
4+
using System.Runtime.CompilerServices;
5+
using System.Threading;
6+
using System.Threading.Tasks;
7+
8+
namespace AsynchronousStreams
9+
{
10+
/// <summary>
11+
/// Async Streams
12+
/// https://blog.jetbrains.com/dotnet/2019/09/16/async-streams-look-new-language-features-c-8/
13+
/// https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/generate-consume-asynchronous-stream
14+
/// </summary>
15+
class Program
16+
{
17+
static async Task Main(string[] args)
18+
{
19+
var cancellationToken = new CancellationTokenSource(millisecondsDelay: 1000);
20+
await foreach (var result in GetTopSearchResults("dotnet").WithCancellation(cancellationToken.Token))
21+
{
22+
Console.WriteLine(result);
23+
}
24+
}
25+
26+
static async IAsyncEnumerable<string> GetTopSearchResults(string term, [EnumeratorCancellation]CancellationToken token = default)
27+
{
28+
while (!token.IsCancellationRequested)
29+
{
30+
using var client = new HttpClient();
31+
yield return await client.GetStringAsync($"https://www.google.com?q={term}");
32+
yield return await client.GetStringAsync($"https://www.bing.com?q={term}");
33+
}
34+
}
35+
}
36+
}

CsharpLangExamples.sln

+6
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NumericLiteralSyntaxImprove
88
EndProject
99
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TupleTypes", "TupleTypes\TupleTypes.csproj", "{8258CFCE-03B8-4EB0-AF78-EAA7F88F4227}"
1010
EndProject
11+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AsynchronousStreams", "AsynchronousStreams\AsynchronousStreams.csproj", "{4B90F64C-6005-45C4-86A0-DDCFD702D780}"
12+
EndProject
1113
Global
1214
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1315
Debug|Any CPU = Debug|Any CPU
@@ -30,5 +32,9 @@ Global
3032
{8258CFCE-03B8-4EB0-AF78-EAA7F88F4227}.Debug|Any CPU.Build.0 = Debug|Any CPU
3133
{8258CFCE-03B8-4EB0-AF78-EAA7F88F4227}.Release|Any CPU.ActiveCfg = Release|Any CPU
3234
{8258CFCE-03B8-4EB0-AF78-EAA7F88F4227}.Release|Any CPU.Build.0 = Release|Any CPU
35+
{4B90F64C-6005-45C4-86A0-DDCFD702D780}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
36+
{4B90F64C-6005-45C4-86A0-DDCFD702D780}.Debug|Any CPU.Build.0 = Debug|Any CPU
37+
{4B90F64C-6005-45C4-86A0-DDCFD702D780}.Release|Any CPU.ActiveCfg = Release|Any CPU
38+
{4B90F64C-6005-45C4-86A0-DDCFD702D780}.Release|Any CPU.Build.0 = Release|Any CPU
3339
EndGlobalSection
3440
EndGlobal

0 commit comments

Comments
 (0)