-1

我有一个stateMachine需要在后台下载大量数据的地方State.LoadingOrderInfos。当我的应用程序正在下载这些东西(在后台)时,操作员应该继续工作并通过下一个states. 在State.InsertPcbs我需要下载的数据。

简而言之。我想LoadECMDataAsync在进入时打电话State.LoadingOrderInfos,它不应该干扰正常的工作流程。

在此处输入图像描述

_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);
4

1 回答 1

0

我想我会创建一个服务类来获取你需要的数据,也许你可以使用 Task.Run int 这个类来启动这个过程。

完成后,它可以设置一个可检查的标志。或者你可以让它调用回调。

然后使用 PermitIf 检查是否设置了标志。

你的问题是正交的,所以我认为划分职责是有意义的。

顺便说一句,您正在使用 OnActivate。仅当您需要“激活”状态机时才应使用此功能,例如从存储中重新加载状态机。目前它像 OnEntry 一样工作(所以使用它),但我想改变它......

于 2019-09-12T12:40:29.333 回答