AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
AsyncTask< T > Class Template Reference

#include "AsyncTask.h"

Public Types

using AsyncFunction = std::function< T()>
 
using CallbackFunction = std::function< void(T)>
 

Public Member Functions

 AsyncTask (AsyncFunction asyncFunc, CallbackFunction callbackFunc)
 
 ~AsyncTask ()
 
bool InvokeIfReady ()
 
void ExecuteAsync ()
 

Private Attributes

AsyncFunction asyncFunc
 
CallbackFunction callbackFunc
 
std::shared_future< T > asyncTask
 
bool isReady
 

Detailed Description

template<typename T>
class AsyncTask< T >

Member Typedef Documentation

◆ AsyncFunction

template<typename T >
using AsyncTask< T >::AsyncFunction = std::function<T()>

◆ CallbackFunction

template<typename T >
using AsyncTask< T >::CallbackFunction = std::function<void(T)>

Constructor & Destructor Documentation

◆ AsyncTask()

template<typename T >
AsyncTask< T >::AsyncTask ( AsyncFunction  asyncFunc,
CallbackFunction  callbackFunc 
)
inline
35 : asyncFunc(std::move(asyncFunc)), callbackFunc(std::move(callbackFunc)), isReady(false)
36 {
37 }
AsyncFunction asyncFunc
Definition AsyncTask.h:87
CallbackFunction callbackFunc
Definition AsyncTask.h:88
bool isReady
Definition AsyncTask.h:90

◆ ~AsyncTask()

template<typename T >
AsyncTask< T >::~AsyncTask ( )
inline
40 {
41 // Ensure that the asynchronous task has completed before destruction
42 if (asyncTask.valid() && asyncTask.wait_for(std::chrono::seconds(0)) != std::future_status::ready)
43 {
44 asyncTask.wait(); // Wait for the task to complete
45 }
46 }
std::shared_future< T > asyncTask
Definition AsyncTask.h:89

References AsyncTask< T >::asyncTask.

Member Function Documentation

◆ ExecuteAsync()

template<typename T >
void AsyncTask< T >::ExecuteAsync ( )
inline
76 {
77 // Capture the function by value so a moved AsyncTask does not leave
78 // the in-flight async holding a dangling this pointer.
80 asyncTask = std::async(std::launch::async, [fn = std::move(fn)]() mutable
81 {
82 return fn();
83 });
84 }
std::function< T()> AsyncFunction
Definition AsyncTask.h:31

References AsyncTask< T >::asyncFunc, and AsyncTask< T >::asyncTask.

Referenced by ToCloud9Sidecar::OnMapsReassigned().

◆ InvokeIfReady()

template<typename T >
bool AsyncTask< T >::InvokeIfReady ( )
inline
49 {
50 if (!isReady)
51 {
52 // Check if the asynchronous task is ready
53 if (asyncTask.valid() && asyncTask.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
54 {
55 // get() rethrows anything the async function threw. Swallowing it
56 // would wedge the cluster handoff (the completion callback signals
57 // map readiness to the registry), so fail fast with context and let
58 // the registry's crash recovery rebalance this node.
59 try
60 {
62 }
63 catch (std::exception const& e)
64 {
65 LOG_ERROR("server.tc9", "AsyncTask failed: {}", e.what());
66 ABORT("AsyncTask failed: {}", e.what());
67 }
68 isReady = true;
69 return true;
70 }
71 }
72 return false;
73 }
#define ABORT
Definition Errors.h:76
#define LOG_ERROR(filterType__,...)
Definition Log.h:145

References ABORT, AsyncTask< T >::asyncTask, AsyncTask< T >::callbackFunc, AsyncTask< T >::isReady, and LOG_ERROR.

Member Data Documentation

◆ asyncFunc

template<typename T >
AsyncFunction AsyncTask< T >::asyncFunc
private

◆ asyncTask

template<typename T >
std::shared_future<T> AsyncTask< T >::asyncTask
private

◆ callbackFunc

template<typename T >
CallbackFunction AsyncTask< T >::callbackFunc
private

◆ isReady

template<typename T >
bool AsyncTask< T >::isReady
private

The documentation for this class was generated from the following file: