内容纲要

AsyncTask 是基于 FRunnable 的封装。

实例:

//定义委托,用来跨线程调用
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMyAsyncTaskNodeResult, int32, Result);

//声明委托
UPROPERTY(BlueprintAssignable)
FMyAsyncTaskNodeResult OnSuccess;

UPROPERTY(BlueprintAssignable)
FMyAsyncTaskNodeResult OnFail;

//需要继承 FNonAbandonableTask
//声明 FAutoDeleteAsyncTask<> 或 FAsyncTask<>
//用 StartBackgroundTask 或 StartSynchronousTask 开始任务
//用 StartSynchronousTask 开始任务好像还是单线程执行

//实现 DoWork ,要注意的是调用UE4对象需要在游戏线程中去执行
//使用AsnycTask可以将制定代码放在指定线程中执行,例如更新文理必须放在游戏线程。
AsyncTask(ENamedThreads::GameThread, [=]()
{
        //比如更新文理必须放在游戏线程。
        updateTeacherMaterialTexture();
        //比如具体逻辑委托调用,委托蓝图连接视图渲染
        Node->OnSuccess.Broadcast(Actor->Counter);
});

//将 MyClassName 替换成自己的类名
FORCEINLINE TStatId GetStatId() const
{
    RETURN_QUICK_DECLARE_CYCLE_STAT(MyClassName,STATGROUP_ThreadPoolAsyncTasks);
}