Awaitable
This lesson explains the awaitable concept in C#
We'll cover the following
Awaitable
In our previous example, we have used the await
operator with objects of type Task
. What types are allowed to be used with the await
operator? The requirements are as follows:
The type should have a method
GetAwaiter()
that returns an instance of a class satisfying specific properties. Say if the return type is classX
then it must meet the following bullet points.X
must implement the interfaceINotifyCompletion
and optionally theICriticalNotifyCompletion
interface.X
must have an accessible, readable instance propertyIsCompleted
of typebool
.X
must have an accessible instance methodGetResult()
with no parameters and no type parameters.
A type which satisfies the above requirements can be used in an await
expression. The Task
class meets all the above requirements.
Working of await
What happens when an await
expression is evaluated? The official documentation offers the most succint and comprehensive description which we preesent verbatime as below:
"The await
operator suspends evaluation of the enclosing async
method until the asynchronous operation represented by its operand completes. When the asynchronous operation completes, the await
operator returns the result of the operation, if any. When the await
operator is applied to the operand that represents already completed operation, it returns the result of the operation immediately without suspension of the enclosing method. The await
operator doesn't block the thread that evaluates the async
method. When the await
operator suspends the enclosing method, the control returns to the caller of the method."
Think about await
as points defined in a program from which threads can leave and return to at some later time in the future.
Awaitbale Example
Now that we understand the basic working of await/async, we'll write a class that we can await
. In our example from the previous section, we used the method Task.Delay()
to asynchronously wait for a specific duration. Now we'll build a class that can be passed-in the number of milliseconds to sleep. Let's see the skeleton of our class first:
Level up your interview prep. Join Educative to access 80+ hands-on prep courses.