2010-07-01 7 views
0

Je suis nouveau sur Windows Workflow et j'essaye d'écrire un processus de longue durée.
J'essaie également de limiter la durée de ce processus.
J'appelle WorkflowInvoker.Invoke pour déclencher mon flux de travail en lui passant un peu de temps pour le test.Workflow 4 CodeActivity ne lance pas TimeoutException

Si j'essaie certaines activités, cela semble fonctionner parfaitement.
Mais si j'utilise un CodeActivity, il semble ignorer complètement mon timeout.

Pourquoi est-ce? Et comment puis-je provoquer l'expiration de mon CodeActivity si cela prend trop de temps?

Un exemple de travail avec une activité de retard:
(Dans cet exemple, le TimeoutException est jeté)

Activity wf = new Sequence() 
{ 
    Activities = 
    { 
     new Delay() 
     { 
      Duration = TimeSpan.FromSeconds(10) 
     }, 
    } 
}; 

try 
{ 
    WorkflowInvoker.Invoke(wf, TimeSpan.FromSeconds(5)); 
} 
catch (TimeoutException ex) 
{ 
    Console.WriteLine(ex.Message); 
} 

Un exemple en essayant d'utiliser un CodeActivity:
(Dans cet exemple, le TimeoutException n'est pas jeté)

public class LongActivity : CodeActivity 
{ 
    protected override void Execute(CodeActivityContext context) 
    { 
     Thread.Sleep(TimeSpan.FromSeconds(10)); 
    } 
} 

Activity wf = new Sequence() 
{ 
    Activities = 
    { 
     new LongActivity() 
    } 
}; 

try 
{ 
    WorkflowInvoker.Invoke(wf, TimeSpan.FromSeconds(5)); 
}  
catch (TimeoutException ex) 
{ 
    Console.WriteLine(ex.Message); 
} 

Répondre

0

le moteur d'exécution de workflow ne peut prendre des mesures quand il est en charge et si votre activité prend 10 secondes pour exécuter, ou le sommeil, le moteur d'exécution ca ne fait rien à ce sujet. Il ne planifie pas de nouvelles activités car il ne reste plus de temps et lancerait une TimeoutException à la place.

Normalement, lorsque vous travaillez longtemps, vous devez utiliser une activité asynchrone, soit AsyncCodeActivity, soit NativeActivity avec un signet afin que le moteur d'exécution soit en contrôle et puisse abandonner le flux de travail.

Questions connexes