ConcurrentExclusiveSchedulerPair Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt Aufgabenplaner bereit, die zum Ausführen von Aufgaben koordinieren und gleichzeitig sicherstellen, dass gleichzeitige und exklusive Aufgaben niemals ausgeführt werden.
public ref class ConcurrentExclusiveSchedulerPair
public class ConcurrentExclusiveSchedulerPair
type ConcurrentExclusiveSchedulerPair = class
Public Class ConcurrentExclusiveSchedulerPair
- Vererbung
-
ConcurrentExclusiveSchedulerPair
Beispiele
Das folgende Beispiel zeigt die Verwendung der ConcurrentExclusiveSchedulerPair Klasse. Leser werden im gleichzeitigen Teil des Schedulers ausgeführt. Der Autor läuft auf dem exklusiven Teil des Schedulers. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für das Thema "How to: Specify a Task Scheduler" in einem Dataflow Block-Artikel bereitgestellt wird.
// Create a ConcurrentExclusiveSchedulerPair object.
// Readers will run on the concurrent part of the scheduler pair.
// The writer will run on the exclusive part of the scheduler pair.
var taskSchedulerPair = new ConcurrentExclusiveSchedulerPair();
// Create an ActionBlock<int> object for each reader CheckBox object.
// Each ActionBlock<int> object represents an action that can read
// from a resource in parallel to other readers.
// Specifying the concurrent part of the scheduler pair enables the
// reader to run in parallel to other actions that are managed by
// that scheduler.
var readerActions =
from checkBox in new CheckBox[] { checkBox1, checkBox2, checkBox3 }
select new ActionBlock<int>(milliseconds =>
{
// Toggle the check box to the checked state.
toggleCheckBox.Post(checkBox);
// Perform the read action. For demonstration, suspend the current
// thread to simulate a lengthy read operation.
Thread.Sleep(milliseconds);
// Toggle the check box to the unchecked state.
toggleCheckBox.Post(checkBox);
},
new ExecutionDataflowBlockOptions
{
TaskScheduler = taskSchedulerPair.ConcurrentScheduler
});
// Create an ActionBlock<int> object for the writer CheckBox object.
// This ActionBlock<int> object represents an action that writes to
// a resource, but cannot run in parallel to readers.
// Specifying the exclusive part of the scheduler pair enables the
// writer to run in exclusively with respect to other actions that are
// managed by the scheduler pair.
var writerAction = new ActionBlock<int>(milliseconds =>
{
// Toggle the check box to the checked state.
toggleCheckBox.Post(checkBox4);
// Perform the write action. For demonstration, suspend the current
// thread to simulate a lengthy write operation.
Thread.Sleep(milliseconds);
// Toggle the check box to the unchecked state.
toggleCheckBox.Post(checkBox4);
},
new ExecutionDataflowBlockOptions
{
TaskScheduler = taskSchedulerPair.ExclusiveScheduler
});
// Link the broadcaster to each reader and writer block.
// The BroadcastBlock<T> class propagates values that it
// receives to all connected targets.
foreach (var readerAction in readerActions)
{
broadcaster.LinkTo(readerAction);
}
broadcaster.LinkTo(writerAction);
' Create a ConcurrentExclusiveSchedulerPair object.
' Readers will run on the concurrent part of the scheduler pair.
' The writer will run on the exclusive part of the scheduler pair.
Dim taskSchedulerPair = New ConcurrentExclusiveSchedulerPair()
' Create an ActionBlock<int> object for each reader CheckBox object.
' Each ActionBlock<int> object represents an action that can read
' from a resource in parallel to other readers.
' Specifying the concurrent part of the scheduler pair enables the
' reader to run in parallel to other actions that are managed by
' that scheduler.
Dim readerActions = From checkBox In New CheckBox() {checkBox1, checkBox2, checkBox3}
Select New ActionBlock(Of Integer)(Sub(milliseconds)
' Toggle the check box to the checked state.
' Perform the read action. For demonstration, suspend the current
' thread to simulate a lengthy read operation.
' Toggle the check box to the unchecked state.
toggleCheckBox.Post(checkBox)
Thread.Sleep(milliseconds)
toggleCheckBox.Post(checkBox)
End Sub, New ExecutionDataflowBlockOptions With {.TaskScheduler = taskSchedulerPair.ConcurrentScheduler})
' Create an ActionBlock<int> object for the writer CheckBox object.
' This ActionBlock<int> object represents an action that writes to
' a resource, but cannot run in parallel to readers.
' Specifying the exclusive part of the scheduler pair enables the
' writer to run in exclusively with respect to other actions that are
' managed by the scheduler pair.
Dim writerAction = New ActionBlock(Of Integer)(Sub(milliseconds)
' Toggle the check box to the checked state.
' Perform the write action. For demonstration, suspend the current
' thread to simulate a lengthy write operation.
' Toggle the check box to the unchecked state.
toggleCheckBox.Post(checkBox4)
Thread.Sleep(milliseconds)
toggleCheckBox.Post(checkBox4)
End Sub, New ExecutionDataflowBlockOptions With {.TaskScheduler = taskSchedulerPair.ExclusiveScheduler})
' Link the broadcaster to each reader and writer block.
' The BroadcastBlock<T> class propagates values that it
' receives to all connected targets.
For Each readerAction In readerActions
broadcaster.LinkTo(readerAction)
Next readerAction
broadcaster.LinkTo(writerAction)
Konstruktoren
| Name | Beschreibung |
|---|---|
| ConcurrentExclusiveSchedulerPair() |
Initialisiert eine neue Instanz der ConcurrentExclusiveSchedulerPair-Klasse. |
| ConcurrentExclusiveSchedulerPair(TaskScheduler, Int32, Int32) |
Initialisiert eine neue Instanz der ConcurrentExclusiveSchedulerPair Klasse, die auf den angegebenen Zeitplan ausgerichtet ist, mit einer maximalen Parallelitätsstufe und einer maximalen Anzahl von geplanten Vorgängen, die als Einheit verarbeitet werden können. |
| ConcurrentExclusiveSchedulerPair(TaskScheduler, Int32) |
Initialisiert eine neue Instanz der ConcurrentExclusiveSchedulerPair Klasse, die auf den angegebenen Zeitplan mit einer maximalen Parallelitätsebene ausgerichtet ist. |
| ConcurrentExclusiveSchedulerPair(TaskScheduler) |
Initialisiert eine neue Instanz der ConcurrentExclusiveSchedulerPair Klasse, die auf den angegebenen Zeitplan ausgerichtet ist. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Completion |
Ruft ein Task , das abgeschlossen wird, wenn der Scheduler die Verarbeitung abgeschlossen hat. |
| ConcurrentScheduler |
Ruft ein TaskScheduler , das verwendet werden kann, um Aufgaben für dieses Paar zu planen, die gleichzeitig mit anderen Aufgaben in diesem Paar ausgeführt werden können. |
| ExclusiveScheduler |
Ruft ein TaskScheduler , das verwendet werden kann, um Vorgänge für dieses Paar zu planen, die ausschließlich in Bezug auf andere Vorgänge in diesem Paar ausgeführt werden müssen. |
Methoden
| Name | Beschreibung |
|---|---|
| Complete() |
Informiert das Zeitplanpaar, dass es keine weiteren Vorgänge akzeptieren sollte. |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |