Threading (C#)Threading (C#)

Mit Threading kann Ihr C#-Programm parallele Verarbeitungsaufgaben durchführen, damit Sie mehr als einen Vorgang gleichzeitig durchführen können.Threading enables your C# program to perform concurrent processing so that you can do more than one operation at a time. Sie können z.B. Threading verwenden, um Benutzereingaben zu überwachen, Aufgaben im Hintergrund auszuführen und parallele Eingabestreams zu behandeln.For example, you can use threading to monitor input from the user, perform background tasks, and handle simultaneous streams of input.

Threads weisen folgende Eigenschaften auf:Threads have the following properties:

Standardmäßig verfügt ein C#-Programm über einen Thread.By default, a C# program has one thread. Sie können aber Hilfsthreads erstellen und diese parallel zum primären Thread zur Ausführung von Code verwenden.However, auxiliary threads can be created and used to execute code in parallel with the primary thread. Diese Threads werden auch als Arbeitsthreads bezeichnet.These threads are often called worker threads.

Arbeitsthreads können zum durchführen von zeitaufwändigen oder zeitkritischen Aufgaben verwendet werden, ohne dass dadurch der primäre Thread gebunden wird.Worker threads can be used to perform time-consuming or time-critical tasks without tying up the primary thread. Arbeitsthreads werden z.B. oft in Serveranwendungen verwendet, um eingehende Anforderungen zu erfüllen, ohne dass auf den Abschluss der vorherigen Anforderung gewartet werden muss.For example, worker threads are often used in server applications to fulfill incoming requests without waiting for the previous request to be completed. Arbeitsthreads werden auch verwendet, um Aufgaben im Hintergrund in der Desktopanwendung auszuführen, damit der Hauptthread – der Elemente der Benutzeroberfläche antreibt – weiterhin auf Benutzeraktionen reagieren kann.Worker threads are also used to perform "background" tasks in desktop applications so that the main thread--which drives user interface elements--remains responsive to user actions.

Threading löst Probleme beim Durchsatz und der Reaktionsfähigkeit. Es kann allerdings zu Problemen bei der Ressourcenfreigabe führen, wie z.B. zu Deadlocks oder zu Racebedingungen.Threading solves problems with throughput and responsiveness, but it can also introduce resource-sharing issues such as deadlocks and race conditions. Mehrere Threads eignen sich am besten für Aufgaben, die verschiedenen Ressourcen erfordern, wie etwa Dateihandles und Netzwerkverbindungen.Multiple threads are best for tasks that require different resources such as file handles and network connections. Wenn Sie einer Ressource mehrere Threads zuweisen, kann es zu Synchronisierungsproblemen kommen. Wenn Threads oft beim Warten auf andere Threads blockiert sind, verfehlt dies den Zweck mehrerer Threads.Assigning multiple threads to a single resource is likely to cause synchronization issues, and having threads frequently blocked when waiting for other threads defeats the purpose of using multiple threads.

Eine gängige Herangehensweise ist hier das Verwenden von Arbeitsthreads, die zeitaufwändige oder zeitkritische Aufgaben durchführen, die nicht viele der Ressourcen erfordern, die von anderen Threads verwendet werden.A common strategy is to use worker threads to perform time-consuming or time-critical tasks that do not require many of the resources used by other threads. Auf einige der Ressourcen in Ihrem Programm muss aber selbstverständlich von mehreren Threads zugegriffen werden.Naturally, some resources in your program must be accessed by multiple threads. Für diese Fälle stellt der System.Threading-Namespace Klassen für das Synchronisieren von Threads bereit.For these cases, the System.Threading namespace provides classes for synchronizing threads. Diese Klassen umfassen Mutex, Monitor Interlocked, AutoResetEvent und ManualResetEvent.These classes include Mutex, Monitor, Interlocked, AutoResetEvent, and ManualResetEvent.

Sie können einige oder alle diese Klassen zum Synchronisieren der Aktivitäten mehrerer Threads verwenden. Allerdings wird der Support für das Threading teilweise von C# unterstützt.You can use some or all these classes to synchronize the activities of multiple threads, but some support for threading is supported by the C# language. Die Lock-Anweisung stellt z.B. Synchronisierungsfunktionen durch das implizit Verwenden von Monitor bereit.For example, the Lock Statement provides synchronization features through implicit use of Monitor.

Hinweis

Ab .NET Framework 4.NET Framework 4 wurde die Multithreadprogrammierung erheblich vereinfacht, und zwar durch die Klassen Parallel und Task, Parallel LINQ (PLINQ), neue parallele Auflistungsklassen im System.Collections.Concurrent-Namespace und ein neues Programmiermodell, das auf dem Konzept von Aufgaben anstatt von Threads basiert.Beginning with the .NET Framework 4.NET Framework 4, multithreaded programming is greatly simplified with the Parallel and Task classes, Parallel LINQ (PLINQ), new concurrent collection classes in the System.Collections.Concurrent namespace, and a new programming model that is based on the concept of tasks rather than threads. Weitere Informationen finden Sie unter Parallel Programming in the .NET Framework (Parallele Programmierung in .NET Framework).For more information, see Parallel Programming.

TitelTitle BeschreibungDescription
Multithreaded Applications (C#) (Multithreadanwendungen (C#))Multithreaded Applications (C#) Beschreibt das Erstellen und Verwenden von ThreadsDescribes how to create and use threads.
Parameter und Rückgabewerte für Multithreadprozeduren (C#)Parameters and Return Values for Multithreaded Procedures (C#) Beschreibt, wie Sie Parameter mit Multithreadanwendungen übergeben und zurückgeben könnenDescribes how to pass and return parameters with multithreaded applications.
Exemplarische Vorgehensweise: Multithreading mit der BackgroundWorker-Komponente (C#)Walkthrough: Multithreading with the BackgroundWorker Component (C#) Veranschaulicht, wie Sie eine einfache Multithreadanwendung erstellen könnenShows how to create a simple multithreaded application.
Threadsynchronisierung (C#)Thread Synchronization (C#) Beschreibt, wie Sie die Interaktionen von Threads steuern könnenDescribes how to control the interactions of threads.
Threadzeitgeber (C#)Thread Timers (C#) Beschreibt, wie die Prozeduren auf separaten Threads in regelmäßigen Abständen ausführen könnenDescribes how to run procedures on separate threads at fixed intervals.
Thread Pooling (C#) (Pooling von Threads (C#))Thread Pooling (C#) Beschreibt, wie Sie einen Pool von Arbeitsthreads verwenden können, die vom System verwaltet werdenDescribes how to use a pool of worker threads that are managed by the system.
Vorgehensweise: Verwenden eines Threadpools (C#)How to: Use a Thread Pool (C#) Veranschaulicht das synchronisierte Verwenden von mehreren Threads im ThreadpoolDemonstrates synchronized use of multiple threads in the thread pool.
ThreadingThreading Beschreibt, wie Sie Threading in .NET Framework implementierenDescribes how to implement threading in the .NET Framework.