title: Why do some async methods require a return type of Task, and others don't
body: <p>In this <a href="https://msdn.microsoft.com/en-us/library/hh191443.aspx" rel="nofollow">example</a> from Microsoft, the method has a return type of <code>Task&lt;int&gt;</code> </p>
  
  <p>Example 1:</p>
  
  <pre><code>async Task&lt;int&gt; AccessTheWebAsync()
  { 
      // You need to add a reference to System.Net.Http to declare client.
      HttpClient client = new HttpClient();
  
      // GetStringAsync returns a Task&lt;string&gt;. That means that when you await the 
      // task you'll get a string (urlContents).
      Task&lt;string&gt; getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
  
      // You can do work here that doesn't rely on the string from GetStringAsync.
      DoIndependentWork();
  
      // The await operator suspends AccessTheWebAsync. 
      //  - AccessTheWebAsync can't continue until getStringTask is complete. 
      //  - Meanwhile, control returns to the caller of AccessTheWebAsync. 
      //  - Control resumes here when getStringTask is complete.  
      //  - The await operator then retrieves the string result from getStringTask. 
      string urlContents = await getStringTask;
  
      // The return statement specifies an integer result. 
      // Any methods that are awaiting AccessTheWebAsync retrieve the length value. 
      return urlContents.Length;
  }
  </code></pre>
  
  <p>In this second example, it uses async and await, BUT doesn't return a type of Task&lt;>, why?</p>
  
  <p>Example 2:</p>
  
  <pre><code>namespace ConsoleApplication
  {
      class Program
      {
          static void Main(string[] args)
          {
              ReadCharacters();
          }
  
          static async void ReadCharacters()
          {
              String result;
              using (StreamReader reader = File.OpenText("existingfile.txt"))
              {
                  Console.WriteLine("Opened file.");
                  result = await reader.ReadToEndAsync();
                  Console.WriteLine("Contains: " + result);
              }
          }
      }
  }
  </code></pre>
  
  <p>Third, in the first example, is it possible to return an array(strings)? </p>