Frage

Ich habe so etwas:

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

Da ich nicht viel auf die CPU drücke, brauche ich keinen Thread. Was kann ich verwenden, anstatt zu rennen, um die Erstellung eines Threads zu vermeiden?

War es hilfreich?

Lösung

Ich denke, Sie verstehen die Absicht der Aufgabe Asynchrony -Muster hier. Was Sie tun, ist wahrscheinlich besser behandelt von ThreadPool.QueueUserWorkItem Dies wird einen Arbeiter -Thread aus dem Pool des Prozesses wiederverwenden und nur einen bei Bedarf erstellen.

Mit dem TAP können Sie eine Aufgabe in "Brocken" der Arbeit unterbrechen, die schrittweise verarbeitet werden können, aber sie bietet jedoch keine Möglichkeit, "dies ist eine Hintergrundaufgabe" zu sagen.

Andere Tipps

Es hängt von der Aufgabe ab, die Sie ausführen. Da Sie sagen, dass es nicht viel CPU verwendet, gehe ich davon aus, dass die Aufgabe lange dauert, da sie auf andere Ereignisse wartet. Sie müssen also Ihre Aufgabe entwerfen, um Rückrufe für diese Ereignisse zu registrieren, bei denen jeder Rückruf schnell im Haupt -Thread abgeschlossen ist, jedoch erst ausgelöst wird, wenn das Ereignis, auf das Sie warten, tatsächlich auftritt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top