3 Stimmen

C# - Als Delegaten tun Asyn Aufgabe noch brauche ich System.Threading?

Da ich asynchrone Operationen mit Delegaten durchführen kann, vermute ich, es gibt eine dünne Chance, System.Threading in meiner Anwendung zu verwenden.Gibt es eine wesentliche Situation, wo ich nicht System.Threading vermeiden kann?

(Ich bin gerade in der Lernphase).

Beispiel:

class Program

{

public delegate int Total (int a,int b);

static void Main()

{

  Total tl = new Total(SumUp);
  IAsyncResult isany=tl.BeginInvoke(20,20, null, null);

    while (!isany.IsCompleted)
    {
        Console.WriteLine("Busy with other work");
    }

    int ans = tl.EndInvoke(isany);

    Console.WriteLine("Result ={0}", ans);

}

static int SumUp(int a,int b)

{
    a = a * a;

    b = b * b;

    return a + b;

}
}

8voto

Mark Seemann Punkte 216836

Es gibt immer bessere Abstraktionen, die sich mit der Gleichzeitigkeit befassen, so dass die Low-Level-Konstrukte oft nicht notwendig sind.

Sie haben bereits ein Beispiel für eine solche Abstraktion auf höherer Ebene gefunden, und .NET 4.0 wird uns einige neue und sehr leistungsfähige Möglichkeiten für den Umgang mit nebenläufigem Code bieten, z. B. Tasks und Fortsetzungen.

Im Laufe der Zeit sollten Sie in der Lage sein, mit Gleichzeitigkeit auf immer höheren Abstraktionsebenen umzugehen. Ob diese Abstraktionen in System.Threading leben oder nicht, ist meiner Meinung nach weniger wichtig.

2voto

thecoop Punkte 43958

Asynchrone Delegierte laufen auf der Thread-Pool wie detailliert ici . Eine Situation, in der ich einen expliziten Thread verwenden musste, war die Ausführung eines UI-Tasks im Hintergrund, da die Thread-Pool-Threads alle Multithreading-Apartments sind und UI-Tasks nur in einem Singlethreading-Apartment ausgeführt werden können. Der Link oben gibt auch ein paar weitere Situationen, in denen es nicht angemessen ist, den Thread-Pool zu verwenden.

Obwohl die meisten kurzlebigen Hintergrundaufgaben mit Hilfe des Threadpools oder asynchroner Delegierter erledigt werden sollten, gibt es immer noch Situationen, in denen Sie einen expliziten Thread erstellen müssen. System.Threading wird in nächster Zeit nicht verschwinden.

-1voto

Richard Punkte 103159

benötige ich noch System.Threading

Was meinen Sie mit "brauchen"? Die Typen von System.threading sind definiert in der mscorlib Baugruppe, die immer geladen ist. Sie brauchen nur zu sagen using System.Threading wenn Sie vollständig qualifizierte Namen in Ihrem Code vermeiden wollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X