Ich habe eine grundlegende cs-major Verständnis von Multi-Threading, aber musste nie etwas über einfache Timer in einer Anwendung zu tun haben. Kennt jemand eine gute Ressource, die mir eine Tour geben wird, wie man mit Multithread-Anwendungen arbeitet, die Grundlagen erklärt und vielleicht einige der schwierigeren Sachen ausstellt?Ich verstehe Threading in der Theorie, aber nicht in der Praxis in. NET
Antwort
Dies ist eine große freie Ressource von Joseph Albahari. Threading in C#
Es gibt 4 grundlegende Möglichkeiten Threads in .Net zu synchronisieren:
- Background Kontrolle
- waithandles
- Callback-Funktionen
- Polling ein asyncResult Objekt
Allgemeinen Sie wollen um an der Spitze dieser Liste zu beginnen und abzuarbeiten. Das bedeutet, zuerst schauen und sehen, ob ein Hintergrundarbeiter-Steuerelement für die Situation geeignet ist. Es wird jedoch ziemlich wahrscheinlich von Windows-Formularen ausgegangen, und Sie erzeugen nur einen neuen Thread.
Also nächste versuchen Waithandles. Waithandles eignen sich gut zum Koordinieren mehrerer Threads. Du kannst sie alle rausschmeißen und warten, bis alle fertig sind, oder wenn du eine bestimmte Zahl aktiv halten willst, dann wartest du nur auf eine und spawne die nächste, wenn sie fertig ist. Oder vielleicht weißt du, dass ein Thread viel früher fertig ist, also kannst du darauf warten, bis er fertig ist, ein wenig Arbeit verrichten und dann warten, bis der Rest fertig ist.
Waithandles scheinen ein wenig zu sein, wenn Sie zum Beispiel nur einen zusätzlichen Thread generieren und nicht blockieren möchten, bis der Vorgang abgeschlossen ist. Dann können Sie einen Rückruf verwenden, so dass die von Ihnen angegebene Funktion aufgerufen wird, sobald der Thread abgeschlossen ist.
Schließlich, wenn und nur wenn aus irgendeinem Grund keiner der oben genannten funktioniert, können Sie zurück auf die Abfrage.
Ich denke, 5 verschiedene Möglichkeiten, wie einen neuen Thread in .Net, auch grob, um zu erhalten:
- OS erstellt, in der Regel als Folge von WinForms Veranstaltung (einschließlich der BackgoundWorker).
- Obj.Begin ___()/Ende ____(). In bestimmten CLR-Klassen sind diese asynchronen Methoden bereits für Sie definiert, und Sie möchten diese natürlich verwenden, wenn sie verfügbar sind.
- ThreadPool.QueueUserWorkItem(). Verwenden Sie die meiste Zeit, um eigene Threads zu erstellen.
- Delegate.BeginInvoke()/EndInvoke(). Sie können jede Methode auf diese Weise umbrechen.
- Thread.Start(). Sie könnte tun es so, aber ich lese kürzlich (nicht den Link jetzt), dass, wenn QueueUserWorkItem funktioniert nicht die Delegate-Methode ist wahrscheinlich besser.
Zwei große Artikel:
What Every Dev Must Know About Multithreaded Apps
Understand the Impact of Low-Lock Techniques in Multithreaded Apps
Obwohl dieser Artikel nicht genau das, was Sie speziell suchen, wird es hoffentlich weiterhelfen allgemein (dh ist bezogen, und eine sehr gute Lektüre):
The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software
Eine gute Web-Ressource über Multi-Threading in .NET zu lernen:
Eines der besten Ressourcen, die ich über das Thema wissen, ist das "Einfädeln in C#" Buch: http://www.albahari.com/threading/
I hat einen großen Überblick über alle ein .net Entwickler muss verstanden werden, um Multi-Thread-Anwendungen zu programmieren.