ChatPlexSDK-BS 1.0.1-v6.2.0
C++ ChatPlex BeatSaber SDK
Loading...
Searching...
No Matches
Task.hpp
1#pragma once
2
3#include "Delegate.hpp"
4#include "MonoPtr.hpp"
5#include "../Unity/MTCoroutineStarter.hpp"
6
7#include <custom-types/shared/coroutine.hpp>
8
9#include <System/Threading/Tasks/Task_1.hpp>
10#include <System/Threading/Tasks/TaskStatus.hpp>
11
12namespace CP_SDK::Utils {
13
14 namespace _u
15 {
16 using namespace System::Threading;
17 using namespace System::Threading::Tasks;
18 }
19
24 template<typename t_Result>
25 static void AwaitTaskAsync(_u::Task_1<t_Result>* p_Task,
26 CActionRef<MonoPtrRef<_u::Task_1<t_Result>>, bool> p_Callback)
27 {
29 custom_types::Helpers::CoroutineHelper::New(Coroutine_AwaitTaskAsync(MonoPtr<_u::Task_1<t_Result>>(p_Task), p_Callback))
30 );
31 }
32
38 template<typename t_Result>
39 custom_types::Helpers::Coroutine Coroutine_AwaitTaskAsync(MonoPtr<_u::Task_1<t_Result>> p_Task,
40 Action<MonoPtrRef<_u::Task_1<t_Result>>, bool> p_Callback)
41 {
42 co_yield nullptr;
43
44 while (true)
45 {
46 if (!p_Task || p_Task->get_IsCanceled())
47 {
48 p_Callback(p_Task, false);
49 co_return;
50 }
51
52 auto l_Status = p_Task->get_Status();
53 if (l_Status == _u::TaskStatus::Faulted || l_Status == _u::TaskStatus::Canceled)
54 {
55 p_Callback(p_Task, false);
56 co_return;
57 }
58
59 if (l_Status == _u::TaskStatus::RanToCompletion)
60 break;
61
62 co_yield nullptr;
63 }
64
65 p_Callback(p_Task, true);
66 }
67
68}
static void EnqueueFromThread(_u::IEnumerator *p_Coroutine)
Enqueue a new coroutine from thread.
Various platform utils like Delegate/Action/Function/Event system.
Definition Delegate.hpp:8
static void AwaitTaskAsync(_u::Task_1< t_Result > *p_Task, CActionRef< MonoPtrRef< _u::Task_1< t_Result > >, bool > p_Callback)
Await a task using a coroutine on the main thread.
Definition Task.hpp:25
custom_types::Helpers::Coroutine Coroutine_AwaitTaskAsync(MonoPtr< _u::Task_1< t_Result > > p_Task, Action< MonoPtrRef< _u::Task_1< t_Result > >, bool > p_Callback)
Await a task using coroutine.
Definition Task.hpp:39