gpt4 book ai didi

c# - 在 WF 4.0 中同时运行多个工作流的最佳方式

转载 作者:可可西里 更新时间:2023-11-01 14:07:56 26 4
gpt4 key购买 nike

我有一个例程,它创建特定工作流的 n 个实例并依次运行它们。我怎样才能异步触发它们?

当前 p 代码:

循环

//创建 var syncEvent = new AutoResetEvent(false); WorkflowInstance myInstance = new WorkflowInstance(new SomeWorkflow(), parameters);

            // Events

// Completed
myInstance.OnCompleted = delegate(WorkflowCompletedEventArgs e) { syncEvent.Set(); };

// Unhandled Exception
myInstance.OnUnhandledException = delegate(WorkflowUnhandledExceptionEventArgs e)
{
// Message
Console.WriteLine(e.UnhandledException.ToString());
return UnhandledExceptionAction.Terminate;
};

// Aborted
myInstance.OnAborted = delegate(WorkflowAbortedEventArgs e)
{
// Message
Console.WriteLine(e.Reason);
syncEvent.Set();
};

// Run
myInstance.Run();

// Wait
syncEvent.WaitOne();

最佳答案

我认为从这里到那里最简单的方法就是创建多个等待句柄并以 WaitAll() 结尾。不是最优雅的解决方案,但它会为你工作。顺便说一句,我会建议使用一个真实的类来保存对关联等待句柄的引用并避免匿名方法。

        List<ManualResetEvent> items = new List<ManualResetEvent>();

foreach (Type job in queue)
{
WorkflowInstance myInstance = new WorkflowInstance(job, parameters);

ManualResetEvent syncEvent = new ManualResetEvent(false);
items.Add(syncEvent);

// Completed
myInstance.OnCompleted = delegate(WorkflowCompletedEventArgs e)
{
syncEvent.Set();
};
// Unhandled Exception
myInstance.OnUnhandledException = delegate(WorkflowUnhandledExceptionEventArgs e)
{
// Message
Console.WriteLine(e.UnhandledException.ToString());
return UnhandledExceptionAction.Terminate;
};

// Aborted
myInstance.OnAborted = delegate(WorkflowAbortedEventArgs e)
{
// Message
Console.WriteLine(e.Reason);
syncEvent.Set();
};

// Run
myInstance.Run();
}

// Wait
WaitHandle.WaitAll(items.ToArray());

关于c# - 在 WF 4.0 中同时运行多个工作流的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1396139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com