De la tâche.Le rendement réel des usages?

J'ai lu à propos de Task.Yield , Et en tant que développeur Javascript, je peux dire que c'est du travail est exactement le même que setTimeout(function (){...},0); en termes de laisser les principales seul thread traiter avec d'autres trucs aka :

"ne prenez pas la puissance , de la libération de temps en temps - de sorte que d'autres pourraient
avoir un aussi..."

En js c'est en travaillant en particulier dans les grandes boucles. ( ne pas faire le navigateur gel...)

Mais j'ai vu cet exemple ici :

public static async Task < int > FindSeriesSum(int i1)
{
    int sum = 0;
    for (int i = 0; i < i1; i++)
    {
        sum += i;
        if (i % 1000 == 0) ( after a bulk , release power to main thread)
            await Task.Yield();
    }

    return sum;
}

Comme un JS programmeur, je peux comprendre ce qu'ils ont fait ici.

MAIS en tant que programmeur C#, je me demande : pourquoi ne pas ouvrir une tâche pour elle ?

 public static async Task < int > FindSeriesSum(int i1)
    {
         //do something....
         return await MyLongCalculationTask();
         //do something
    }

Question

Avec Js je ne peux pas ouvrir une Tâche (oui je sais que je peux réellement avec des web workers) . Mais avec c# je peux.

Si oui -- pourquoi même pas la peine avec le fait de sortir de temps en temps alors que je peux le sortir à tout ?

Modifier

L'ajout de références :

De ici :
De la tâche.Le rendement réel des usages?

De ici (un autre livre électronique):

De la tâche.Le rendement réel des usages?

  • C'est un mauvais exemple, parce que Task.Yield de ne pas conserver l'INTERFACE utilisateur réactive. Aussi, async et await ne pas libérer le thread d'INTERFACE utilisateur; si vous avez un long calcul, vous aurez besoin d'utiliser Task.Run.
  • En considérant une application multithread (ASP.NET ou similaire) lorsqu'une tâche est en cours d'exécution sur le fil la piscine et le pool de threads est une ressource précieuse: Si une longue course UC tâche appel await Task.Yield() chaque seconde alors d'autres tâches en cours d'exécution devraient avoir une chance sans en attente dans la file d'attente pendant une longue période. Ne serait-ce pas un comportement juste?
  • La préemption fil de commutation intégré dans chaque système d'exploitation moderne combiné avec l'auto-réglage du pool de threads .NET de travail beaucoup mieux qu'un manuel await Task.Yield().
InformationsquelleAutor Royi Namir | 2014-05-02