我读过的每一篇博文都告诉你如何在 C# 中使用异步方法,但出于某种奇怪的原因,从未解释过如何构建自己的异步方法来使用。所以我现在有这段代码使用我的方法:
private async void button1_Click(object sender, EventArgs e) { var now = await CountToAsync(1000); label1.Text = now.ToString(); }
我写了这个方法CountToAsync:
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); }
这是Task.Factory编写异步方法的最佳方式,还是我应该以另一种方式编写?
Task.Factory
StartNew除非您需要那种复杂程度,否则我不建议您这样做。
StartNew
如果您的异步方法依赖于其他异步方法,最简单的方法是使用async关键字:
async
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; }
如果您的异步方法正在做 CPU 工作,您应该使用Task.Run:
Task.Run
private static async Task<DateTime> CountToAsync(int num = 10) { await Task.Run(() => ...); return DateTime.Now; }
您可能会发现我的async/await介绍很有帮助。
await