Skip to main content

Posts

C# Anatomy of Async and Await - Part 2

This is second part of C# Anatomy of Async and Await series, feel free to go through all parts listed following : https://www.usmanrafiq.com/2020/07/anatomy-of-async-and-await-part-1.html Part 1https://www.usmanrafiq.com/2020/07/c-anatomy-of-async-and-await-part-2.html Part 2Today we are going to see some of the best practices to get maximum out of Asyn & Await in C#.
First it is not recommended at all to call asynchronous methods synchronously but lets say in some situation we have to some how, then we should make sure that we are not calling  

Synchronization context is another key factor which we usually ignore, it means that to return execution control to the same thread which started that asynchronous task, it is important when the stater thread is UI but it make no sense if it was not main / UI thread, in that case the cost of context switching will be apply and overall performance of the application will hurt. So the rule is if its a web app / api apply ConfigureAwait(false) fo…

C# Anatomy of Async and Await - Part 1

I am using async and await keywords from quiet along time and feel that should be explained in light of my experience with them. There are many use cases of them but generally need them when we don't want our program to get halt while making some  API call ( http / web request ). Some other use cases are :CPU bound task that took time ( using Task.Run )Accessing file resources ( async streams )etc.Above was little context that will help us understand the internal working of an async task, lets jump right into points that will help us to understand the anatomy and describe some brief explanation so that we can understand it clearly, so the first point is : 
# First, we use async with a method which has await keyword inside its body, can't use one without another, its rule.  Explanation : There will be compile time error if we miss any keyword.
#Second, we only use await keyword with method call ( await SomeMethod(); ) which returns Task or Task<T> Explanation : When we call a…