Question

J'ai quelque chose comme ceci:

private void DoSomething()
{
    System.Console.WriteLine("Creating Foo");
    Foo result = new Foo();

    DoSomethingAsync();

    System.Console.WriteLine("Returning Foo");
    return result;
}


private async void DoSomethingAsync()
{
    // The following task takes a long time, but is not CPU intensive
    await TaskEx.Run(() =>
    {
         // code lives here... removed for this example
    });
}

Depuis que je ne frappe la CPU beaucoup, je ne suis pas besoin d'un fil. Que puis-je utiliser au lieu de courir pour éviter la création d'un fil?

Était-ce utile?

La solution

Je pense que vous avez mal compris l'intention du motif asynchronisme Tâche ici. Ce que vous faites est probablement mieux gérée par ThreadPool.QueueUserWorkItem qui réutilisera un thread de travail de la piscine du processus, la création d'un seul si nécessaire.

Le TAP vous permet de briser une tâche en « morceaux » de travail qui peuvent être traitées progressivement, mais il ne fournit pas directement un moyen de dire « ceci est une tâche d'arrière-plan ».

Autres conseils

Cela dépend de la tâche que vous faites. Puisque vous dites qu'il n'utilise pas beaucoup de CPU, je suppose que la tâche prend beaucoup de temps, car il attend d'autres événements. Ainsi, vous devrez concevoir votre tâche d'enregistrer pour callbacks ces événements, où chaque rappel finalise rapidement sur le thread principal, mais ne se déclenche pas jusqu'à ce que l'événement que vous attend se produit en fait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top