Exemple #1
0
 void NewComplexTask()
 {
     Debug.Log("Add new complex task");
     //Create new ComplexTask.
     ct = new ComplexTask()
     {
         Priority         = -10,
         TaskID           = 003,
         AssignementLevel = 0
     };
     //Create new MoveTask.
     mt = new WaitTask()
     {
         Priority         = 1,
         TaskID           = 004,
         AssignementLevel = 0,
         WaitTimeSeconds  = 1
     };
     //Add it to the complex task.
     ct.ComplexTaskList.Add(mt);
     //Make another.
     mt = new WaitTask()
     {
         Priority         = 2,
         TaskID           = 005,
         AssignementLevel = 0,
         WaitTimeSeconds  = 3
     };
     //Add that one aswell.
     ct.ComplexTaskList.Add(mt);
     //Finally add the complex task we have just built to the tasklist.
     taskManager.TaskList.Add(ct);
 }
    private static Task DefineDialogueSequence()
    {
        Task enterDialogue = new DelegateTask(() => { Logger.Warning("DefineDialogueSequence start"); }, () =>
        {
            return(Services.PlayerMovement.inPlaceForSequence);
        });

        ActionTask triggerCameraAndUI = new ActionTask(() =>
        {
            Logger.Warning("DefineDialogueSequence triggering camera to enter dialogue");
            Services.CameraManager.EnterDialogue();
            Services.UIManager.EnterDialogue();
        });

        Task fadeIn = new WaitTask(.5f);

        Task startConvo = new ActionTask(() =>
        {
            Logger.Warning("DefineDialogueSequence entering dialogue");
            Services.DialogueController.EnterDialogue();
            _enterDialogueFailsafe.Abort();
        });

        enterDialogue.Then(triggerCameraAndUI).Then(fadeIn).Then(startConvo);
        return(enterDialogue);
    }
 public void AssingTasks(PlayerScript player)
 {
     for (int i = 0; i < 2; i++)
     {
         WaitTask wait        = null;
         bool     isGenerated = false;
         while (isGenerated == false)
         {
             wait = waitTasks[Random.Range(0, waitTasks.Length)];
             if (!player.playerTasks.Contains(wait))
             {
                 isGenerated = true;
             }
         }
         player.playerTasks.Add(wait);
     }
     for (int i = 0; i < 3; i++)
     {
         PasswordTask pass      = null;
         bool         generated = false;
         while (generated == false)
         {
             pass = passTasks[Random.Range(0, passTasks.Length)];
             if (!player.playerTasks.Contains(pass))
             {
                 generated = true;
             }
         }
         player.playerTasks.Add(pass);
     }
 }
    public WaitTask Wait(double duration)
    {
        var task = new WaitTask(duration);

        AddTask(task);
        return(task);
    }
    public static void Save()
    {
        Task save   = new ActionTask(() => { Services.SaveManager.SaveData(); });
        Task wait   = new WaitTask(.5f);
        Task finish = new ActionTask(() => { UnityEngine.SceneManagement.SceneManager.LoadScene(1); });

        save.Then(wait).Then(finish);
        _taskManager.Do(save);
    }
Exemple #6
0
            public override void copyto(BehaviorTask target)
            {
                base.copyto(target);

                Debug.Check(target is WaitTask);
                WaitTask ttask = (WaitTask)target;

                ttask.m_start = this.m_start;
                ttask.m_time  = this.m_time;
            }
    public void SetQuestlogText(string questTag, string newText)
    {
        Logger.Debug($"tag = {questTag} text = {newText}");
        if (_questTagToLog.ContainsKey(questTag) && _questTagToLog[questTag] == null)
        {
            return;
        }

        if (newText.Equals("") || newText.Equals("Find out what happened to the forest"))
        {
            _questTagToLog[questTag].text = newText;
            return;
        }

        Task displayHolder = new ActionTask(() =>
        {
            DisplayQuestLogUI();
        });

        Task wait1 = new WaitTask(.5f);

        Task triggerTextAnim = new ActionTask(() =>
        {
            HideUI(_questTagToLog[questTag]);
        });

        Task wait2 = new WaitTask(.5f);

        Task setText = new ActionTask(() =>
        {
            _questTagToLog[questTag].text = newText;
            DisplayUI(_questTagToLog[questTag]);
        });

        Task wait3 = new WaitTask(5.5f);

        Task hideHolder = new ActionTask(() =>
        {
            HideQuestLogUI();
            _updatingQuestLog = false;
        });

        if (_updatingQuestLog)
        {
            wait1.Then(triggerTextAnim).Then(wait2).Then(setText);
            _taskManager.Do(wait1);
        }
        else
        {
            _updatingQuestLog = true;
            displayHolder.Then(wait1).Then(triggerTextAnim).Then(wait2).Then(setText).Then(wait3).Then(hideHolder);
            _taskManager.Do(displayHolder);
        }
    }
    /// <summary>
    /// For organizing statements when both parties are "talking" at once.
    /// </summary>
    /// <param name="opponentStmt">Opponent statement.</param>
    /// <param name="playerStmt">Player statement.</param>
    public void SimultaneousStatements(string opponentStmt, string playerStmt)
    {
        MakeStatementTask opponentTask = new MakeStatementTask(opponentStmt, MoveBalloonTask.GrowOrShrink.Grow);
        MakeStatementTask playerTask   = new MakeStatementTask(playerStmt, MoveBalloonTask.GrowOrShrink.Shrink);

        WaitTask waitTask = new WaitTask();

        opponentTask.Then(waitTask);
        waitTask.Then(playerTask);

        Services.Tasks.AddTask(opponentTask);
    }
    /// <summary>
    /// For generic statements of unpredictable formatting--how many attacks the Ranger has left, etc.
    /// </summary>
    public void MakeStatement(string statement, BalloonTypes type)
    {
        TextMeshProUGUI balloon = AddBalloon(statement, type);

        balloon.text = statement;

        ManageChatLength();
        WaitTask waitTask  = new WaitTask();
        WaitTask waitTask2 = new WaitTask();         //an ugly, irksome bodge! the scrollbar needs to be fully resized before the scrolling starts

        waitTask.Then(waitTask2);
        waitTask2.Then(new ScrollChatTask());

        Services.Tasks.AddTask(waitTask);
    }
        public IEnumerator wait_task()
        {
            Human            human = CreateHuman();
            CommandProcessor cp    = human.CommandProcessor;

            Task task = new WaitTask(0.1f);

            yield return(AddTaskAndWaitUntilFinished(task, cp));

            if (cp.HasTask == true)
            {
                Assert.Fail();
            }

            human.Die();
            Assert.Pass();
        }
    private static Task DefineDialogueFailsafeSequence()
    {
        WaitTask   failsafeWait   = new WaitTask(9.1f);
        ActionTask failsafeAction = new ActionTask(() =>
        {
            if (!Services.PlayerMovement.inPlaceForSequence)
            {
                Services.CameraManager.EnterDialogue();
                Services.UIManager.EnterDialogue();
                Logger.Warning("Dialogue Failsafe Triggered in SequenceManager");
            }
        });

        failsafeWait.Then(failsafeAction);

        return(failsafeWait);
    }
        private Task DefineSequence()
        {
            Task start = new ActionTask(() =>
            {
                Context.ResetInputs();
            });

            Task wait2Secs           = new WaitTask(2f);
            Task forceFinalTransform = new ActionTask(() => {
                Context.ForceTransform(Services.QuestItemRepository.TargetStep3PlayerPosition.position, Services.QuestItemRepository.TargetStep3PlayerPosition.rotation);
                Context.ForceTransform(Vector3.zero, Services.QuestItemRepository.TargetStep3PlayerPosition.rotation);
            });

            start.Then(wait2Secs).Then(forceFinalTransform);

            return(start);
        }
Exemple #13
0
 public Task <bool> WaitAsync(TimeSpan timeout)
 {
     lock (this.waiters)
     {
         if (this.signaled)
         {
             this.signaled = false;
             return(CompletedTrueTask);
         }
         else
         {
             var waiter = new WaitTask(this, timeout);
             this.waiters.Add(waiter);
             return(waiter.Task);
         }
     }
 }
Exemple #14
0
        private void DefineSequence()
        {
            //Context.cutsceneCamera.LookAt = Services.QuestItemRepository.CurrentQuestItem().transform; // figure out what it's looking at

            Task         wait2Secs    = new WaitTask(2f);
            DelegateTask cameraDolly5 = new DelegateTask(
                () => {
                Context.anim.Play(Str.CutsceneDolly5);     // Play end cutscene animation
                elapsedTime = 0f;
            },
                () =>
            {
                elapsedTime += Time.deltaTime;
                return(elapsedTime > 15f);
            });

            wait2Secs.Then(cameraDolly5);
            Context._taskManager.Do(wait2Secs);
        }
Exemple #15
0
        // Defines tasks for turtle movement.
        private Task DefineTasks()
        {
            NPCCollider npcCollider = _turtleTrans.GetComponentInChildren <NPCCollider>();
            Vector3     initScale   = npcCollider.transform.localScale;

            npcCollider.transform.localScale = Vector3.zero;
            Task wait = new WaitTask(1f);

            Task start = new ActionTask(() =>
            {
                _turtleAnim.SetBool(Str.Running, true);
                // sound?
            });

            Task prev = start;

            for (int i = 0; i < ((TurtleQuest)Context)._turtleRoute.Length; i++)
            {
                Task next = TurtleMove(((TurtleQuest)Context)._turtleRoute[i]);
                prev = prev.Then(next);
            }

            Task finish = new ActionTask
                          (
                () => {
                _turtleAnim.SetBool(Str.Running, false);
                npcCollider.transform.localScale = initScale; // causes problems
                npcCollider.Appear();                         // causes problems
                if (Context.QuestStage < 4)
                {
                    QuestManager.AdvanceQuest(Context.QuestTag);
                }
            }
                          );


            wait.Then(start);

            prev.Then(finish);

            return(wait);
        }
Exemple #16
0
 //Just for testing, constructs a new task after half a second and adds it to the list.
 void NewTask()
 {
     Debug.Log("Add new task");
     mt = new WaitTask()
     {
         Priority         = 1,
         TaskID           = 001,
         AssignementLevel = 0,
         WaitTimeSeconds  = 2
     };
     taskManager.TaskList.Add(mt);
     mt = new WaitTask()
     {
         Priority         = -10,
         TaskID           = 002,
         AssignementLevel = 1,
         WaitTimeSeconds  = 5
     };
     taskManager.TaskList.Add(mt);
 }
 protected override void Init()
 {
     //		Debug.Log ("go feedback");
     loadAndPlay();
     //if this task previously had a next task assigned, we're going to delay it until the audio finishes playing.
     if (NextTask != null)
     {
         if (GameManager.instance.aSource.clip != null)
         {
             Task     realNext = NextTask;
             WaitTask w        = new WaitTask(GameManager.instance.aSource.clip.length * 1000);
             w.Then(realNext);
             this.Then(w);
         }
         else
         {
             Debug.Log("COULDN'T FIND " + _filePath);
         }
     }
     finishPlaying();
 }
Exemple #18
0
        public Task <T> WaitFor <T>(Func <T, IDictionary <string, object>, bool> filter, CancellationToken cancellationToken = default) where T : IEvent
        {
            RemoveExpiredEvents();

            lock (_lockObj)
            {
                var matchingRecordedEvent = _events
                                            .Where(x => x.Event is T)
                                            .FirstOrDefault(recordedEvent => filter((T)recordedEvent.Event, recordedEvent.Arguments));

                if (matchingRecordedEvent != null)
                {
                    _log.Debug("Matching event for {eventType} returned from event store with age of {eventAge} ms", typeof(T).FullName, (_clock.UtcNow - matchingRecordedEvent.TimeStamp).TotalMilliseconds);
                    return(Task.FromResult((T)matchingRecordedEvent.Event));
                }
            }

            var task = new WaitTask((evnt, args) => filter((T)evnt, args), typeof(T));

            cancellationToken.Register(() =>
            {
                _log.Debug("Awaiting event on task {awaiterTaskId} cancelled for event {eventType}", task.GetHashCode(), typeof(T).FullName);
                task.WaitHandle.Set();
            });

            _log.Debug("Creating event awaiter task {awaiterTaskId} for event {eventType}", task.GetHashCode(), typeof(T).FullName);

            lock (_lockObj) { _tasks.Add(task); }

            return(new TaskFactory <T>().StartNew(() =>
            {
                task.WaitHandle.WaitOne();

                _log.Verbose("Removing awaiting event task {awaiterTaskId} for event {eventType}", task.GetHashCode(), typeof(T).FullName);

                lock (_lockObj) { _tasks.Remove(task); }

                return (T)task.Event;
            }, cancellationToken));
        }
Exemple #19
0
        public void Set()
        {
            WaitTask toRelease = null;

            lock (this.waiters)
            {
                if (this.waiters.Count > 0)
                {
                    toRelease = this.waiters[0];
                    this.waiters.RemoveAt(0);
                }
                else if (!this.signaled)
                {
                    this.signaled = true;
                }
            }

            if (toRelease != null)
            {
                toRelease.Set();
            }
        }
        private Task DefineSequence()
        {
            Task start = new ActionTask(() =>
            {
                Context.ResetInputs();
                Context.inPlaceForSequence = false;
            });

            Task moveToInitPos = Context.PlayerMoveToTransform(
                Services.QuestItemRepository.TargetStep1PlayerPosition, // Position target for player
                Services.QuestItemRepository.TargetItemPosition,        // direction target for player
                Services.QuestItemRepository.TargetItemPosition);       // Not totally sure.

            start.Then(moveToInitPos);

            Task phase2Start = Context.LastTask(moveToInitPos);

            Task reset1 = new ActionTask(() => { Context.inPlaceForSequence = false; });

            Task moveToMidPos = Context.PlayerMoveToTransform(
                Services.QuestItemRepository.TargetStep2PlayerPosition,
                Services.QuestItemRepository.TargetItemPosition,
                Services.QuestItemRepository.TargetItemPosition);

            phase2Start.Then(reset1).Then(moveToMidPos);

            Task phase3Start         = Context.LastTask(moveToMidPos);
            Task reset2              = new ActionTask(() => { Context.inPlaceForSequence = false; });
            Task wait4Secs           = new WaitTask(4f);
            Task forceFinalTransform = new ActionTask(() => {
                Context.ForceTransform(Services.QuestItemRepository.TargetStep4PlayerPosition.position, Services.QuestItemRepository.TargetStep4PlayerPosition.rotation);
                Services.UIManager.HideItemPickupPrompt();
            });

            phase3Start.Then(reset2).Then(wait4Secs).Then(forceFinalTransform);

            return(start);
        }
        /// <summary>
        /// Changes the current language.
        /// </summary>
        /// <param name="language">The language.</param>
        public void ChangeCurrentLanguage(LanguageInfo language)
        {
            language.Culture.DateTimeFormat = _systemFormat;

            var localizationChangingArgs = new LocalizationChangingEventArgs(language);

            _localizationChangingEvent.Publish(localizationChangingArgs);

            if (localizationChangingArgs.WaitingFor.IsEmpty())
            {
                SetCurrentLanguage(language);
            }
            else
            {
                var waitTask = new WaitTask(Logger)
                {
                    Handlers = localizationChangingArgs.WaitingFor.ToArray(),
                    OnResult = result => { SetCurrentLanguage(language); }
                };

                _taskQueue.Enqueue(waitTask);
            }
        }
    private static Task DefineEndSequence()
    {
        ActionTask firstSequence = new ActionTask(() =>
        {
            Services.UIManager.CutsceneFadeIn();
            inCutscene = true;
        });
        Task waitForTime1 = new WaitTask(2f);

        ActionTask secondSequence = new ActionTask(() =>
        {
            Services.UIManager.CutsceneFadeOut();
            Services.UIManager.HideAllUI();
            PlayerAnimation.Sitting(true);
            FModMusicManager.EndCutscene();
            cutsceneObjectsManager.EndNPCs();
        });

        Task waitForTime2 = new WaitTask(14f);

        ActionTask thirdSequence = new ActionTask(() =>
        {
            Services.UIManager.CutsceneFadeIn();
        });

        Task waitForTime3 = new WaitTask(4f);

        Task endGame = new ActionTask(() =>
        {
            inCutscene = false;
            FModMusicManager.EndMusicLayers();
            UnityEngine.SceneManagement.SceneManager.LoadScene(2);
        });

        firstSequence.Then(waitForTime1).Then(secondSequence).Then(waitForTime2).Then(thirdSequence).Then(waitForTime3).Then(endGame);
        return(firstSequence);
    }
    // Use this for initialization
    protected override void Start()
    {
        base.Start();

        scale        = 0;
        totalHp      = hp;
        currentPhase = Phase.Default;
        gameObject.transform.localScale = new Vector3(scale, scale, scale);

        taskManager = new TaskManager();

        scaleUpTask          = new ProgressionTask(ScaleUp, 0);
        enterAppearPhaseTask = new ActionTask(EnterAppearPhase);
        enterSpawnPhaseTask  = new ActionTask(EnterSpawnPhase);
        enterFirePhaseTask   = new ActionTask(EnterFirePhase);
        enterChasePhaseTask  = new ActionTask(EnterChasePhase);
        enterDeadPhaseTask   = new ActionTask(Die);
        spawnTask            = new ProgressionTask(Spawn, 0);
        idleTask             = new WaitTask(3f);
        moveTask             = new ProgressionTask(Move, 0);
        attackTask           = new ProgressionTask(Attack, 0);

        Services.EnemyManager.AddBoss(gameObject);
    }
Exemple #24
0
        protected override BehaviorTask createTask()
        {
            WaitTask pTask = new WaitTask();

            return pTask;
        }
Exemple #25
0
        protected override BehaviorTask createTask()
        {
            WaitTask pTask = new WaitTask();

            return(pTask);
        }
    /*
     * 1. Move player to position. Move camera behind player. ~2s
     * 2. Move Camera to cutsceneCamera, have camera slowly focus on item. Make player walk to tree. ~2s
     * 3. Trigger Quest item repository to take item, trigger sounds and particle effects, smoothly animate it into position and have large particle effect. 2s
     * 4. Fade to white? black? 2s
     * 5. stay there for a sec as music fades. Place player into new position. 3s
     * 6. Fade back in and have player turned around as environment changes are triggered. 2s
     * 7. 1 sec later have player get up and return to normal controls. 1s // turns around!
     */
    private static Task DefineMidSequence()
    {
        // 1. Move player to position. Move camera behind player. ~2s
        Task enterSequence = new DelegateTask(() =>
        {
            inCutscene = true;
        }, () =>
        {
            Services.UIManager.HideItemPickupPrompt();
            return(Services.PlayerMovement.inPlaceForSequence);
        });

        Task waitForTime1 = new WaitTask(1f);

        // 2. Move Camera to cutsceneCamera, have camera slowly focus on item. Make player walk to tree. ~2s
        Task secondSequence = new DelegateTask(() =>
        {
            // Trigger particles?
            // Trigger music?
        }, () =>
        {
            Services.UIManager.HideItemPickupPrompt();
            return(Services.PlayerMovement.inPlaceForSequence);
        });

        Task dropItem = new ActionTask(() => { Services.PlayerItemHolder.DropItem(); });

        Task waitForTime2 = new WaitTask(.66f);

        // 3.Trigger Quest item repository to take item, trigger sounds and particle effects, smoothly animate it into position and have large particle effect. 2s
        ActionTask thirdSequence = new ActionTask(() =>
        {
            Services.QuestItemRepository.StartSequence();

            FModMusicManager.ReturnedItem();
            // Quest item Repository takes Item.
            // trigger other stuff.
        });

        // Add in phase here to show plants growing?????????????????????????????????????

        Task waitForTime3 = new WaitTask(1.5f);

        // 4. Fade to white? black? 2s
        ActionTask fourthSequence = new ActionTask(() =>
        {
            // Fade out?
            Services.UIManager.CutsceneFadeIn();
        });

        // 5. stay there for a sec as music fades. Place player into new position. 3s
        Task waitForTime4 = new WaitTask(4.5f);

        // 6. Fade back in and have player turned around as environment changes are triggered. 2s
        ActionTask fifthSequence = new ActionTask(() =>
        {
            Services.PostProcessingManager.AdvanceStage();
            PlayerAnimation.Sitting(true);
            // Fade in?
            Services.UIManager.CutsceneFadeOut();
            Services.UIManager.HideDialogueEnterPrompt();
        });

        Task waitForTime5 = new WaitTask(1f);

        ActionTask triggerPlantAnims = new ActionTask(() => { cutsceneObjectsManager.Transition(); });

        Task waitForTime6 = new WaitTask(10.5f);
        // 7. 1 sec later have player get up and return to normal controls. 1s
        ActionTask sixthSequence = new ActionTask(() =>
        {
            PlayerAnimation.Sitting(false);
            NPCInteractionManager.FindClosestNPC();
            Services.GameManager.EnterDialogue();
            inCutscene = false;
        });

        enterSequence.Then(waitForTime1).Then(secondSequence).Then(dropItem).Then(waitForTime2).Then(thirdSequence).Then(waitForTime3).Then(fourthSequence).Then(waitForTime4).Then(fifthSequence).Then(waitForTime5).Then(triggerPlantAnims).Then(waitForTime6).Then(sixthSequence);
        return(enterSequence);
    }
    public void TestWaitingWorkItemsProperty() {
      int eventCount = AffineThreadPool.Processors;
      WaitTask[] tasks = new WaitTask[eventCount];

      int createdTasks = 0;
      try {
        // CHECK: Is there danger that the thread pool still has not finished
        //        queued items for other unit tests, thereby failing to meet
        //        our expected task counts?

        // Create the tasks, counting up the created task counter. If an exception
        // occurs, we will roll back from there.
        for(createdTasks = 0; createdTasks < eventCount; ++createdTasks) {
          tasks[createdTasks] = new WaitTask();
        }

        // Schedule the blocking tasks in the thread pool so it will not be able
        // to process the next task we add to the queue
        for(int index = 0; index < eventCount; ++index) {
          AffineThreadPool.QueueUserWorkItem(tasks[index].Callback);
        }

        // Wait for the tasks to start so they aren't preempted by the tasks we're
        // going to add (which would finish immediately). The affine thread pool
        // works on a first come first serve basis, but we don't want to rely on this
        // implementation detail in the unit test.
        for(int index = 0; index < eventCount; ++index) {
          Assert.IsTrue(
            tasks[index].StartEvent.WaitOne(10000),
            "Task " + index.ToString() + " was started"
          );
        }
        
        // All Thread should now be active and no work items should be waiting
        Assert.AreEqual(
          createdTasks, AffineThreadPool.ActiveThreads,
          "ActiveThreads property equals number of tasks"
        );
        Assert.AreEqual(
          0, AffineThreadPool.WaitingWorkItems,
          "No waiting work items are in the queue"
        );

        // Add a task to the queue and make sure the waiting work item count goes up
        AffineThreadPool.QueueUserWorkItem(delegate(object state) { });
        Assert.AreEqual(
          1, AffineThreadPool.WaitingWorkItems,
          "Added work item is waiting in the queue"
        );

        // The same again. Now we should have 2 work items sitting in the queue
        AffineThreadPool.QueueUserWorkItem(delegate(object state) { });
        Assert.AreEqual(
          2, AffineThreadPool.WaitingWorkItems,
          "Both added work items are waiting in the queue"
        );

        // Let the WaitTasks finish so we're not blocking the thread pool any longer
        for(int index = 0; index < eventCount; ++index) {
          tasks[index].WaitEvent.Set();
        }

        // Wait for the tasks to end before we get rid of them
        for(int index = 0; index < eventCount; ++index) {
          Assert.IsTrue(
            tasks[index].FinishEvent.WaitOne(1000),
            "Task " + index.ToString() + " has finished"
          );
        }
      }
      finally {
        for(--createdTasks; createdTasks >= 0; --createdTasks) {
          tasks[createdTasks].Dispose();
        }
      }
    }
Exemple #28
0
        public async Task <Stream> GetMessageStream(bool asText)
        {
            await WaitTask.ConfigureAwait(false);

            return(await WebSocket.GetMessageStream(asText).ConfigureAwait(false));
        }
Exemple #29
0
        public async Task SendBinary(Stream stream)
        {
            await WaitTask.ConfigureAwait(false);

            await WebSocket.SendBinary(stream).ConfigureAwait(false);
        }
Exemple #30
0
        public async Task SendBinary(ArraySegment <byte> buffer)
        {
            await WaitTask.ConfigureAwait(false);

            await WebSocket.SendBinary(buffer).ConfigureAwait(false);
        }
Exemple #31
0
        public async Task SendText(string d)
        {
            await WaitTask.ConfigureAwait(false);

            await WebSocket.SendText(d).ConfigureAwait(false);
        }
Exemple #32
0
        async Task IWebSocketInternal.SendTextRaw(string text)
        {
            await WaitTask.ConfigureAwait(false);

            await WebSocket.SendTextRaw(text).ConfigureAwait(false);
        }