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?