   to the caller once the given computation is performed.
 
   Besides `async/1` and `await/2`, tasks can also be
-  started as part of supervision trees and dynamically spawned
+  started as part of supervision tree and dynamically spawned
   in remote nodes. We will explore all three scenarios next.
 
   ## async and await
 
-  One of the common uses of tasks is to convert some sequential code
+  One of the common use of tasks is to convert some sequential code
   into concurrent one with `Task.async/1` while keeping its semantics.
   When invoked, a new process will be created, linked and monitored
   by the caller. Once the task action finishes, a message will be sent


  If the timeout is exceeded, `await` will exit, however,
  the task will continue to run. When the calling process exits, its
  exit signal will close the task if it is not trapping exits.

  This function assumes the task's monitor is still active or the monitor's
  `:DOWN` message is in the message queue. If it has been demonitored, or the

  Starts a task.

  This is only used when the task is used for side-effects
  (i.e. no interest in the returned result) and it should not
  be linked to the current process.
  """
  @spec start(fun) :: {:ok, pid}
