0

Ich plane, den State Machine WorkFlow von Windows Workflows zu verwenden.Ist die StateMachine auf Windows WorkFlow Thread Safe?

wird die Zustandsmaschine Ereignisse aus zwei separaten Threads sein empfängt, wird die Zustandsmaschine natürlich sowohl ihren Zustand ändern und Aktionen basierend auf seinem aktuellen Zustand und das Ereignis ausführen, die in kam.

Meine Frage ist, ist die Zustandsmaschine von Windows-Workflow threadsicher, was bedeutet, dass sie die korrekte Zustandsänderung garantiert, wenn zwei Threads gleichzeitig auf sie zugreifen?

Antwort

4

Die Ausführung von Arbeitsabläufen erfolgt nach Konventionen mit einem einzigen Thread, dh, eine bestimmte Instanz eines Arbeitsablaufs kann nur innerhalb einer Laufzeit von jeweils einem Thread ausgeführt werden. Das ist Absicht. Die Workflow-Laufzeit verwendet eine interne Planungswarteschlange, um Vorgänge für Workflowinstanzen auszuführen. Daher werden zwei Threads, die Operationen an derselben Workflowinstanz aufrufen, zunächst serialisiert und anschließend entweder durch einen neuen Thread, der von der Task geplant wird, aufgerufen Laufzeit (Standardplanung) oder durch den Thread, der vom aufrufenden Kontext für jede Operation gespendet wird (manuelle Planung). Bei der Verwendung des Persistenzdienstes stellt die Workflowlaufzeit auch sicher, dass die Datenbankversion synchronisiert wird - eine andere Workflowlaufzeit auf einem anderen Prozess/Rechner kann dieselbe Workflowinstanz nicht aus Persistenz laden, wenn sie gerade von einer anderen Workflowlaufzeit geöffnet ist .

Dies bedeutet, dass Sie sich nicht mit Thread-Sicherheit für Code beschäftigen müssen, der innerhalb eines Workflow-Modells ausgeführt wird (z. B. müssen Sie Property-Setter nicht sperren), und Sie müssen sich nicht mit Rennen befassen Bedingungen.

1

Was für (zum Beispiel) in der Microsoft-Dokumentation Ihre Interpretation dieser Art der Sache ist die State Activity CLass in System.Workflow.Activitie:

Thema Sicherheit Alle öffentlichen static (Shared in Visual Basic) Mitglieder von diesem Typ sind Gewinde sicher. Alle Instanzmitglieder sind nicht garantiert Thread-sicher.

Ähnliche Passagen sind in vielen relevanten Klassen gegeben. Meine Schlussfolgerung ist "Nein" nicht thread sicher für die Nutzung, die Sie beabsichtigen.

+0

Ich bin mir nicht sicher, dass das für Windows WorkFlow gelten wird. Da viele der Vorgänge in Windows WorkFlow für Sie erledigt sind, verhält es sich eher wie ein Framework als nur von Ihnen manipulierte Klassen. – aattia

+0

Diese sind explizit auf Dokumentation von Klassen von Windows Workflow. Wenn Sie eine API aufrufen, müssen Sie sich um die Thread-Sicherheit sorgen - die Dokumentation, die ich gefunden habe, scheint ziemlich eindeutig zu sein. Ich denke, es ist vernünftig anzunehmen, dass die Framework-Aspekte von Windows Workflow es selbst richtig machen und synchronisieren, wo es benötigt wird. Es kann hilfreich sein, wenn Sie uns eine Skizze zeigen, wo sich Ihr Meister interessiert. – djna