1. ホーム
  2. c#

[解決済み】C#で非同期メソッドを作成する方法とは?

2022-04-09 21:19:16

質問

私が読んだすべてのブログ記事は、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 非同期メソッドを書くのに最適な方法なのか、それとも別の方法で書くべきなのか?

どのように解決するのですか?

推奨しない 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 イントロ を参考にしました。