title: The awaitable and awaiter In C# 5.0 Asynchronous
body: <p>Task or Task&lt;TResult&gt; object is awaitable, so we can use await key on those whose return value is Task  or Task&lt;TResult&gt;.
  Task or Task&lt;TResult&gt; are the most frequently-used awaitable object.</p>
  
  <p>We also can define our own awaitable object.The object should has below qualification.</p>
  
  <ol>
  <li>It has a GetAwaiter() method (instance method or extension method);</li>
  <li>Its GetAwaiter() method returns an awaiter. An object is an awaiter
  if:
  <ul>
  <li>It implements INotifyCompletion or ICriticalNotifyCompletion
   interface;</li>
  <li>It has an IsCompleted, which has a getter and returns a Boolean;</li>
  <li>it has a GetResult() method, which returns void, or a result.</li>
  </ul></li>
  </ol>
  
  <p>My question is that why Microsoft didn't provide a interface to  constrain these awaitable object? 
  The current method to implement awaitable object is a little complicated.</p>