title: Which is the proper way for async method returns task?
body: <p>I am so confused with the following methods. Which one is the best and why? These are working fine.</p>
  
  <pre><code>public string GetString(int i)
  {
      return "Testing number " + i.ToString();
  }
  
  //async methods where I'm confused with
  public Task&lt;string&gt; GetStringAsync(int i)
  {
      return Task.FromResult&lt;string&gt;(GetString(i));
  }
  //Or
  public Task&lt;string&gt; GetStringAsync(int i)
  {
      Task&lt;string&gt; task = new Task&lt;string&gt;(() =&gt; GetString(i));
      task.Start();
      return task;
  }
  //Or
  public Task&lt;string&gt; GetStringAsync(int i)
  {
      var tcs = new TaskCompletionSource&lt;string&gt;();
      tcs.SetResult(GetString(i));
      return tcs.Task;
  }
  </code></pre>
  
  <p>The caller will be</p>
  
  <pre><code>Task&lt;string&gt; task = SomeClass.GetStringAsync(9);
  Console.WriteLine(task.Result);
  //Or
  var result = await SomeClass.GetStringAsync(9);
  Console.WriteLine(result);
  </code></pre>
  
  <p>Thank you so much.</p>