/// <summary> /// Queues a transition in worker state for processing. Returns a task that can be awaited /// when the operation completes. /// </summary> /// <param name="request">The request.</param> /// <returns>The awaitable task.</returns> private Task <WorkerState> QueueStateChange(StateChangeRequest request) { lock (SyncLock) { if (StateChangeTask != null) { return(StateChangeTask); } var waitingTask = new Task <WorkerState>(() => { StateChangedEvent.Wait(); lock (SyncLock) { StateChangeTask = null; return(WorkerState); } }); StateChangeTask = waitingTask; StateChangedEvent.Reset(); StateChangeRequests[request] = true; waitingTask.Start(); CycleCancellation.Cancel(); return(waitingTask); } }
public void TestStateChange() { var world = new World("Test world"); var em = world.EntityManager; var system = world.CreateSystem <CharacterSystem>(); var obj = em.CreateEntity(); var obj2 = em.CreateEntity(); em.AddComponentData(obj, StateChangeRequest.Create <Dead>()); em.AddComponentData(obj2, StateChangeRequest.Create <Alive>()); system.Update(); system.Update(); Assert.IsTrue(StateUtility.IsInState <Dead>(obj, em)); Assert.IsTrue(StateUtility.IsInState <Alive>(obj2, em)); em.AddComponentData(obj, StateChangeRequest.Create <Alive>()); em.AddComponentData(obj2, StateChangeRequest.Create <Dead>()); system.Update(); Assert.IsTrue(StateUtility.IsInState <Alive>(obj, em)); Assert.IsTrue(StateUtility.IsInState <Dead>(obj2, em)); }
private async Task DeleteBook() { var confirmParams = new ModalParameters(); confirmParams.Add(nameof(Confirm.ConfirmationMessage), $"آیا از حذف کتاب {BookDto.Title} مطمئن میباشید؟"); var confirmModal = ModalService.Show <Confirm>("تایید حذف", confirmParams); var result = await confirmModal.Result; if (!result.Cancelled && (bool)result.Data) { await BookWebService.DeleteBook(BookDto.Id); ToastService.ShowSuccess("حذف کتاب با موفقیت انجام شد"); await StateChangeRequest.InvokeAsync(); } }
void PUC.IDevice2.HandleMessage(Connection c, PUC.Communication.Message m) { Globals.GetFrame(_appliance).AddLogLine(m.ToString()); PUC.Communication.Message newmsg; if (m is SpecRequest) { newmsg = new PUC.Communication.DeviceSpec(_specification); c.Send(newmsg); } else if (m is FullStateRequest) { IEnumerator states = _appliance.VariableTable.GetObjectEnumerator();; while (states.MoveNext()) { if (!((ApplianceObject)states.Current).State) { continue; } ApplianceState state = (ApplianceState)states.Current; if (state.Defined) { newmsg = new StateChangeNotification(state.FullName, state.Value.ToString()); } else { newmsg = new StateChangeNotification(state.FullName); } c.Send(newmsg); } } else if (m is StateChangeRequest) { StateChangeRequest smsg = (StateChangeRequest)m; try { ApplianceState state = (ApplianceState)_appliance.VariableTable[smsg.GetState()]; if (state != null) { string val = state.Type.ValueSpace.Validate(smsg.Value).ToString(); newmsg = new StateChangeNotification(smsg.GetState(), val); SendAll(newmsg); } } catch (Exception) { } } else if (m is CommandInvokeRequest) { this.AddLogLine("Command " + ((CommandInvokeRequest)m).GetCommand() + " requested to be invoked."); } }