How do you create an asynchronous method in C#?

async-await, c#, c#-5.0

Solution

I don't recommend `StartNew` unless you need that level of complexity.

If your async method is dependent on other async methods, the easiest approach is to use the `async` keyword:

private static async Task<DateTime> CountToAsync(int num = 10)
{
  for (int i = 0; i < num; i++)
  {
    await Task.Delay(TimeSpan.FromSeconds(1));
  }

  return DateTime.Now;
}

If your async method is doing CPU work, you should use `Task.Run`:

private static async Task<DateTime> CountToAsync(int num = 10)
{
  await Task.Run(() => ...);
  return DateTime.Now;
}

You may find my `async`/`await` intro helpful.

Problem

Every blog post I've read tells you how to consume an asynchronous method in C#, but for some odd reason never explain how to build your own asynchronous methods to consume. So I have this code right now that consumes my method: ``` private async void button1_Click(object sender, EventArgs e) { var now = await CountToAsync(1000); label1.Text = now.ToString(); } ``` And I wrote this method that is `CountToAsync`: ``` private Task<DateTime> CountToAsync(int num = 1000) { return Task.Factory.StartNew(() => { for (int i = 0; i < num; i++) { Console.WriteLine("#{0}", i); } }).ContinueWith(x => DateTime.Now); } ``` Is this, the use of `Task.Factory`, the best way to write an asynchronous method, or should I write this another way?

Original source