Skip to content

Instantly share code, notes, and snippets.

@supix
Last active August 30, 2018 09:57
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save supix/2034626cbc0568e0324ae46288c0124d to your computer and use it in GitHub Desktop.
Simple console application demonstrating how async programming allows to save time
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;
}
}
}
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