Kermer icon

Async example

Kermer | PRO | 11/19/18 05:00:51 PM UTC | 0 ⭐ | 221 👁️ | Never ⏰ | []
C# |

1.34 KB

|

None

|

0 👍

/

0 👎

using System;
using System.Threading.Tasks;
 
class Program
{
    static void Main(string[] args)
    {
        TestAsync();
        
        Console.WriteLine($"{now()}: Before ReadKey()");
        Console.ReadKey();
    }
 
    static async Task<int> AsyncTask()
    {
        Console.WriteLine($"{now()}: AsyncTask() start");
        await Task.Delay(2000);
        Console.WriteLine($"{now()}: AsyncTask() end");
        //DoInvalidAction();
        return new Random().Next(1,10);
    }
    static void DoInvalidAction() => throw new Exception("test exception");
 
    static void TestAsync()
    {
        Console.WriteLine($"{now()}: TestAsync() start");
        var _task = AsyncTask();
        _task.GetAwaiter().OnCompleted(() => OnTaskCompleted(_task, "AsyncTask"));
        Console.WriteLine($"{now()}: TestAsync() end");
    }
 
    static async void OnTaskCompleted(Task<int> task, object callee)
    {
        try
        {
            Console.WriteLine($"{now()}: '{callee}' task completed! result: {await task}");
        }
        catch (Exception ex) when (LogException(ex, true))
        {
            //LogException(ex);
        }
    }
 
    static string now() => DateTime.Now.ToString("mm:ss.ffff");
    static bool LogException(Exception ex, bool suppress) { Console.WriteLine(ex); return !suppress; }
}

Comments