Last active
August 30, 2018 09:57
-
-
Save supix/2034626cbc0568e0324ae46288c0124d to your computer and use it in GitHub Desktop.
Simple console application demonstrating how async programming allows to save time
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Diagnostics; | |
using System.Threading; | |
using System.Threading.Tasks; | |
namespace ConsoleApp1 | |
{ | |
internal class Program | |
{ | |
private static void Main(string[] args) | |
{ | |
var myClass = new MyClass(); | |
Task.WaitAll(myClass.Start()); | |
} | |
} | |
internal class MyClass | |
{ | |
public async Task Start() | |
{ | |
var rfm1 = new ReadFromMoon(1); | |
var rfm2 = new ReadFromMoon(2); | |
var rfm3 = new ReadFromMoon(3); | |
var sw = new Stopwatch(); | |
sw.Start(); | |
var ret1Task = rfm1.ReadAsync(); | |
var ret2Task = rfm2.ReadAsync(); | |
var ret3Task = rfm3.ReadAsync(); | |
var ret1 = await ret1Task; | |
var ret2 = await ret2Task; | |
var ret3 = await ret3Task; | |
sw.Stop(); | |
Console.WriteLine($"{ret1} {ret2} {ret3}"); | |
Console.WriteLine($"Elapsed: {sw.ElapsedMilliseconds}"); | |
Console.WriteLine($"Premi un tasto..."); | |
Console.ReadLine(); | |
} | |
} | |
internal class ReadFromMoon | |
{ | |
private readonly int returnedResult; | |
public ReadFromMoon(int returnedResult) | |
{ | |
this.returnedResult = returnedResult; | |
} | |
public async Task<int> ReadAsync() | |
{ | |
var waitUntil = DateTime.Now.AddSeconds(2); | |
await Task.Run(() => | |
{ | |
while (DateTime.Now < waitUntil) | |
{ | |
Thread.Sleep(100); | |
} | |
}); | |
return returnedResult; | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Diagnostics; | |
using System.Threading; | |
namespace ConsoleApp1 | |
{ | |
internal class Program | |
{ | |
private static void Main(string[] args) | |
{ | |
var myClass = new MyClass(); | |
myClass.Start(); | |
} | |
} | |
internal class MyClass | |
{ | |
public void Start() | |
{ | |
var rfm1 = new ReadFromMoon(1); | |
var rfm2 = new ReadFromMoon(2); | |
var rfm3 = new ReadFromMoon(3); | |
var sw = new Stopwatch(); | |
sw.Start(); | |
var ret1 = rfm1.Read(); | |
var ret2 = rfm2.Read(); | |
var ret3 = rfm3.Read(); | |
sw.Stop(); | |
Console.WriteLine($"{ret1} {ret2} {ret3}"); | |
Console.WriteLine($"Elapsed: {sw.ElapsedMilliseconds}"); | |
Console.WriteLine($"Premi un tasto..."); | |
Console.ReadLine(); | |
} | |
} | |
internal class ReadFromMoon | |
{ | |
private readonly int returnedResult; | |
public ReadFromMoon(int returnedResult) | |
{ | |
this.returnedResult = returnedResult; | |
} | |
public int Read() | |
{ | |
var waitUntil = DateTime.Now.AddSeconds(2); | |
while (DateTime.Now < waitUntil) | |
{ | |
Thread.Sleep(100); | |
} | |
return returnedResult; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment