| 618 | } |
| 619 | |
| 620 | TSharedPtr<FDeferredCallbackHandle> DeferredCallback(FPCGExContext* InContext, FSimpleCallback&& InCallback) |
| 621 | { |
| 622 | TSharedPtr<FDeferredCallbackHandle> DeferredCallback = MakeShared<FDeferredCallbackHandle>(); |
| 623 | DeferredCallback->Callback = InCallback; |
| 624 | |
| 625 | TWeakPtr<FDeferredCallbackHandle> WeakTask = DeferredCallback; |
| 626 | UE::Tasks::Launch( |
| 627 | TEXT("DeferredCallback"), |
| 628 | [WeakTask]() |
| 629 | { |
| 630 | const TSharedPtr<FDeferredCallbackHandle> Task = WeakTask.Pin(); |
| 631 | if (!Task.IsValid()) { return; } |
| 632 | if (Task->Start()) { Task->Complete(); } |
| 633 | }, |
| 634 | UE::Tasks::ETaskPriority::Default |
| 635 | ); |
| 636 | |
| 637 | return DeferredCallback; |
| 638 | } |
| 639 | |
| 640 | void CancelDeferredCallback(const TSharedPtr<FDeferredCallbackHandle>& InCallback) |
| 641 | { |