Einstieg zur Workflow Foundation 4 : Timeout für Workflows setzen

by Gregor Biswanger 15. Dezember 2010 07:37

Mit dem WorkflowInvoker der als Workflow Hoster fungiert, kann ein Timeout für die Laufzeit der Workflows gesetzt werden. Als Beispiel wird das gleiche Projekt vom Blog-Post “Einstieg zur Workflow Foundation 4 : Workflows asynchron aufrufen” verwendet.

Dabei wird der InvokeAsync-Methode ein TimeSpan mit der gewünschten Zeit für den Timeout überreicht (Siehe Listing 1).

 

   1:  class Program
   2:  {
   3:      private static readonly AutoResetEvent WaitEvent = new AutoResetEvent(false);
   4:   
   5:      static void Main(string[] args)
   6:      {
   7:          Console.WriteLine("Host: Ich starte DemoWorkflow - Thread: {0}", Thread.CurrentThread.ManagedThreadId);
   8:   
   9:          try
  10:          {
  11:              WorkflowInvoker workflowInvoker = new WorkflowInvoker(new DemoWorkflow());
  12:              workflowInvoker.InvokeCompleted += (s, e) =>
  13:                                                     {
  14:                                                         Console.WriteLine("Host: Workflow ist fertig - Thread: {0}", Thread.CurrentThread.ManagedThreadId);
  15:                                                         WaitEvent.Set();
  16:                                                     };
  17:   
  18:              workflowInvoker.InvokeAsync(TimeSpan.FromSeconds(2));
  19:                  
  20:              Console.WriteLine("Host: DemoWorkflow gestartet... - Thread: {0}", Thread.CurrentThread.ManagedThreadId);
  21:              WaitEvent.WaitOne();
  22:          }
  23:          catch (Exception exception)
  24:          {
  25:              Console.WriteLine("Host: Workflow exception: {0}", exception.Message);
  26:          }
  27:   
  28:          Console.ReadLine();
  29:      }
  30:  }

Listing 1 – Workflow wird asynchron aufgerufen mit einem gesetzten Timeout von 2 Sekunden.

Unter Zeile 18 wird der Workflow gestartet. Es wird als Parameter ein Timeout mittels TimeSpan von 2 Sekunden mitgegeben. Ein Timeout kann für jede Methode die ein Workflow startet gesetzt werden. Also auch für die einfache Invoke-Methode etc.

Beim starten der Anwendung mittels [F5] Tastendruck sollte sich die Console öffnen und wie unter Abb.1 dargestellt werden.

SNAGHTML44409a7

Abb.1 – Workflow wird nach 2 Sekunden ignoriert und im Speicher gekillt.

 

Wenn der Workflow allerdings synchron mit einem Timeout ausgeführt wird, erhält man eine Timeout-Exception. Als Beispiel wird der Source-Code aus Listing 1 auf synchron umgeschrieben, siehe Listing 2.

 

   1:  class Program
   2:  {
   3:      static void Main(string[] args)
   4:      {
   5:          Console.WriteLine("Host: Ich starte DemoWorkflow - Thread: {0}", Thread.CurrentThread.ManagedThreadId);
   6:   
   7:          try
   8:          {
   9:              WorkflowInvoker workflowInvoker = new WorkflowInvoker(new DemoWorkflow());
  10:              workflowInvoker.Invoke(TimeSpan.FromSeconds(2));
  11:                  
  12:              Console.WriteLine("Host: DemoWorkflow gestartet... - Thread: {0}", Thread.CurrentThread.ManagedThreadId);
  13:          }
  14:          catch (Exception exception)
  15:          {
  16:              Console.WriteLine("Host: Workflow exception: {0}", exception.Message);
  17:          }
  18:   
  19:          Console.ReadLine();
  20:      }
  21:  }

Listing 2 - Workflow wird synchron aufgerufen mit einem gesetzten Timeout von 2 Sekunden.

 

Wenn die Anwendung nun ausgeführt wird, erscheint eine Timeout-Exception.

 

SNAGHTML44ae5e1

Abb.1 – Workflow wird nach 2 Sekunden mit einer Timeout-Exception gekillt.



Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war, bitten "kicken" sie ihn.
kick it on dotnet-kicks.de

Kommentare

Powered by BlogEngine.NET 1.4.5.0
Theme by Extensive SEO

Über den Autor

Gregor Biswanger

Microsoft MVP für Client App Dev
XING

Gregor Biswanger (Microsoft MVP für Client App Dev) ist freier Consultant, Trainer, Autor und Speaker.


Seine Schwerpunkte liegen im Bereich der .NET-Architektur, agilen Prozessen und XAML. Er veröffentlichte vor kurzem seine DVD´s mit Video-Trainings zum Thema „Meine erste Windows 8 App“, „Windows Store Apps mit XAML und C#“ und „WPF 4.5 und Silverlight 5“ bei Addison-Wesley von video2brain.


Biswanger ist auch im Auftrag von Intel GmbH als Technologieberater für die Intel Developer Zone aktiv und ist Leader bei der Ingolstädter .NET Developers Group (INdotNET). 

 

Video über mich:
http://www.youtube.com/watch?v=mx_6SiiLxjk


Basta! 2011 Speaker

CLIPer

MCTS
Windows SharePoint Services 3.0 – Application Development (MCTS)