private void StopAndResetLoadingTask()
 {
     if (m_LoadingTask == null)
     {
         return;
     }
     Owner.StopAndResetResourceLoadingTask(m_LoadingTask);
     m_LoadingTask = null;
 }
                internal override void OnSlotReady()
                {
                    if (Status != ResourceCacheStatus.WaitingForSlot)
                    {
                        throw new InvalidOperationException($"Oops! '{nameof(OnSlotReady)}' cannot be called on status '{Status}'.");
                    }

                    m_LoadingTask = Owner.RunResourceLoadingTask(Path,
                                                                 ShouldLoadFromReadWritePath ? Owner.ReadWritePath : Owner.InstallerPath);
                    InternalLog.DebugFormat("[ResourceCache Update] {0} start loading", Path);
                    Status = ResourceCacheStatus.Loading;
                    StartTicking();
                }
                protected override void Update(TimeStruct timeStruct)
                {
                    switch (Status)
                    {
                    case ResourceCacheStatus.WaitingForSlot:
                        if (Owner.m_RunningResourceLoadingTasks.Count < Owner.m_RunningResourceLoadingTasks.Capacity)
                        {
                            m_LoadingTask = Owner.RunResourceLoadingTask(Path,
                                                                         ShouldLoadFromReadWritePath ? Owner.ReadWritePath : Owner.InstallerPath);
                            CoreLog.DebugFormat("[ResourceCache Update] {0} start loading", Path);
                            Status = ResourceCacheStatus.Loading;
                        }

                        break;

                    case ResourceCacheStatus.Loading:
                        if (!string.IsNullOrEmpty(m_LoadingTask.ErrorMessage))
                        {
                            ErrorMessage = m_LoadingTask.ErrorMessage;

                            CoreLog.DebugFormat("[ResourceCache Update] {0} loading fail", Path);
                            FailAndNotify();
                        }
                        else if (m_LoadingTask.IsDone)
                        {
                            ResourceObject = m_LoadingTask.ResourceObject;

                            CoreLog.DebugFormat("[ResourceCache Update] {0} loading success", Path);
                            SucceedAndNotify();
                        }

                        break;

                    default:
                        break;
                    }
                }
コード例 #4
0
 private void StopAndResetResourceLoadingTask(ResourceLoadingTask task)
 {
     m_RunningResourceLoadingTasks.Remove(task);
     task.OnReset();
     m_ResourceLoadingTaskPool.Release(task);
 }