小编典典

如何在 C# 中创建异步方法?

all

我读过的每一篇博文都告诉你如何在 C# 中使用异步方法,但出于某种奇怪的原因,从未解释过如何构建自己的异步方法来使用。所以我现在有这段代码使用我的方法:

private async void button1_Click(object sender, EventArgs e)
{
    var now = await CountToAsync(1000);
    label1.Text = now.ToString();
}

我写了这个方法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编写异步方法的最佳方式,还是我应该以另一种方式编写?


阅读 66

收藏
2022-06-23

共1个答案

小编典典

StartNew除非您需要那种复杂程度,否则我不建议您这样做。

如果您的异步方法依赖于其他异步方法,最简单的方法是使用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

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

您可能会发现我的async/await介绍很有帮助。

2022-06-23