207 votes

Comment créer une méthode Async dans C# 5

Chaque billet de blog que j'ai lu vous indique comment utiliser une méthode asynchrone en C# 5, mais pour une raison étrange, jamais expliquer comment construire vos propres méthodes asynchrones à consommer. J'ai donc ce code juste maintenant que consomme ma méthode.

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

Et j'ai écrit cette méthode qui est 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);
}

Est-ce, l'utilisation de la Tâche.En usine, la meilleure façon d'écrire une méthode asynchrone, ou devrais-je écrire cela d'une autre façon?

241voto

Stephen Cleary Points 91731

Je ne recommande pas d' StartNew , sauf si vous avez besoin de ce niveau de complexité.

Si votre méthode asynchrone est dépendante d'autres méthodes asynchrones, l'approche la plus simple est d'utiliser l' async mot-clé:

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;
}

Si votre méthode asynchrone est de faire de l'UC de travail, vous devez utiliser Task.Run:

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

Vous pouvez trouver mon async/await intro utile.

1voto

Pat Points 104

Voici un très bon tutoriel.

J’ai réussi à combiner avec AsyncCommands et il fonctionne très bien.

http://weblogs.asp.net/Dixin/Archive/2012/11/02/Understanding-c-Async-await-1-compilation.aspx

-2voto

user1373377 Points 63
<pre><code></code><p><strong>Task.Factory.StartNew()</strong> <strong>nouvelle tâche</strong> démarrez-le et retourner cette tâche</p></pre>

-3voto

Il suffit d’ajouter quelques mots à votre code - « async » et « attendre » :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X