Frage

Ich verfüge über grundlegende CS-Hauptkenntnisse von Multithreading, musste aber nie etwas anderes als einfache Timer in einer Anwendung tun.Kennt jemand eine gute Ressource, die mir eine Einführung in die Arbeit mit Multithread-Anwendungen gibt, mir die Grundlagen erklärt und vielleicht einige der schwierigeren Dinge anspricht?

War es hilfreich?

Lösung

Dies ist eine großartige kostenlose Ressource von Joseph Albahari. Threading in C#

Andere Tipps

Zwei tolle Artikel:

Was jeder Entwickler über Multithread-Apps wissen muss
Verstehen Sie die Auswirkungen von Low-Lock-Techniken in Multithread-Apps

Obwohl dieser Artikel nicht genau das ist, wonach Sie suchen, wird er Ihnen hoffentlich im Allgemeinen (z. B.Es Ist verwandt und eine sehr gute Lektüre):

Das kostenlose Mittagessen ist vorbei:Eine grundlegende Wende hin zur Parallelität in der Software

Es gibt vier grundlegende Möglichkeiten, Threads in .Net zu synchronisieren:

  • BackgroundWorker-Steuerelement
  • WaitHandles
  • Rückruffunktionen
  • Abfragen eines ASyncResult-Objekts

Im Allgemeinen möchten Sie oben auf der Liste beginnen und sich nach unten vorarbeiten.Das heißt, schauen Sie sich zunächst einmal an, ob eine Hintergrundarbeiter-Kontrolle für die Situation angemessen ist.Es wird jedoch weitgehend von Windows Forms ausgegangen und Sie erzeugen nur einen neuen Thread.

Versuchen Sie es als nächstes mit Wartegriffen.Waithandles eignen sich gut zum Koordinieren mehrerer Threads.Sie können sie alle starten und warten, bis sie alle fertig sind, oder wenn Sie eine bestimmte Anzahl aktiv halten möchten, warten Sie einfach auf einen und lassen den nächsten erscheinen, wenn er fertig ist.Oder vielleicht wissen Sie, dass ein Thread viel früher fertig wird, also können Sie warten, bis er fertig ist, ein wenig arbeiten und dann warten, bis der Rest fertig ist.

Waithandles scheinen etwas zu viel zu sein, wenn Sie beispielsweise nur einen zusätzlichen Thread erzeugen und nicht blockieren möchten, bis er fertig ist.Dann können Sie einen Rückruf verwenden, sodass die von Ihnen angegebene Funktion aufgerufen wird, sobald der Thread abgeschlossen ist.

Wenn schließlich aus irgendeinem Grund keine der oben genannten Maßnahmen funktioniert, können Sie auf Umfragen zurückgreifen.

Mir fallen 5 verschiedene Möglichkeiten ein, einen neuen Thread in .Net zu erstellen, ebenfalls grob in der Reihenfolge:

  • Das Betriebssystem wurde normalerweise als Ergebnis eines Winforms-Ereignisses (einschließlich BackgoundWorker) erstellt.
  • Obj.Begin___()/End____().Für bestimmte CLR-Klassen sind diese asynchronen Methoden bereits für Sie definiert, und Sie möchten sie natürlich verwenden, sobald sie verfügbar sind.
  • ThreadPool.QueueUserWorkItem().Verwenden Sie dies meistens, um Ihre eigenen Threads zu erstellen.
  • Delegate.BeginInvoke()/EndInvoke().Sie können jede Methode auf diese Weise umschließen.
  • Thread.Start().Du könnte Machen Sie es auf diese Weise, aber ich habe kürzlich etwas gelesen (ich habe den Link jetzt nicht), dass die Delegate-Methode wahrscheinlich besser ist, wenn QueueUserWorkItem nicht funktioniert.

Eine gute Webressource, um mehr über Multithreading in .NET zu erfahren:

Eine der besten Ressourcen, die ich zu diesem Thema kenne, ist das Buch „Threading in C#“:http://www.albahari.com/threading/

Ich habe einen großartigen Überblick über alles, was ein .net-Entwickler verstehen muss, um Multithread-Anwendungen zu programmieren.

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