C# .NET无状态并行工作流/长并行后台进程
我有一个C# .NET无状态并行工作流/长并行后台进程,c#,state-machine,stateless-state-machine,C#,State Machine,Stateless State Machine,我有一个stateMachine,需要在State.LoadingOrderInfos后台下载大量数据。当我的应用程序在后台下载内容时,操作员应该继续工作并查看下一个状态。 在State.InsertPcbs我需要下载的数据 简而言之。我想在进入状态时调用LoadECMDataAsync。LoadingOrderInfos不应干扰正常的工作流 我想我应该创建一个服务类来获取您需要的数据,也许您可以使用Task.Run int这个类来启动这个过程 完成后,它可以设置一个可检查的标志。或者你可以让
stateMachine
,需要在State.LoadingOrderInfos
后台下载大量数据。当我的应用程序在后台下载内容时,操作员应该继续工作并查看下一个状态
。
在State.InsertPcbs
我需要下载的数据
简而言之。我想在进入状态时调用LoadECMDataAsync
。LoadingOrderInfos
不应干扰正常的工作流
我想我应该创建一个服务类来获取您需要的数据,也许您可以使用Task.Run int这个类来启动这个过程 完成后,它可以设置一个可检查的标志。或者你可以让它调用回调 然后使用PermitIf检查是否已设置标志 你的问题很严重,所以我认为把责任分开是有道理的 顺便说一句,您正在使用OnActivate。仅当您需要“激活”状态机时才应使用此选项,如从存储器重新加载状态机。目前,它的工作原理类似于OnEntry(所以使用它),但我想改变它
_machine.Configure(State.LoadingOrderInfos)
.Ignore(Trigger.WtPresent)
.Ignore(Trigger.WtNotPresent)
.SubstateOf(State.CanLogOut)
.Permit(Trigger.OrderLoadingFailed, State.OrderNotSelected)
.Permit(Trigger.OrderLoadingComplete, State.OrderCheckSetup)
.OnEntry(() =>
{
IsLoading = true;
Wt = null;
})
// Is this the way how to do it?
.OnEntry(() =>
{
LoadECMDataAsync();
})
.OnActivate(async () =>
{
if (await _LoadOrderInfos().ConfigureAwait(true))
{
_machine.Fire(Trigger.OrderLoadingComplete);
}
else
{
_machine.Fire(Trigger.OrderLoadingFailed);
}
})
.OnExit(() => IsLoading = false);