소스 검색

游戏结束了task还在执行

DESKTOP-27RMV90\A 5 달 전
부모
커밋
ccd6430586
1개의 변경된 파일18개의 추가작업 그리고 2개의 파일을 삭제
  1. 18 2
      ActionTowerDefense/Assets/Scripts/EnemyCreater.cs

+ 18 - 2
ActionTowerDefense/Assets/Scripts/EnemyCreater.cs

@@ -5,9 +5,11 @@ using cfg;
 using System.Threading.Tasks;
 using Base.Common;
 using System.Linq;
+using System.Threading;
 
 public class EnemyCreater : MonoBehaviour
 {
+    private CancellationTokenSource _cancellationTokenSource;
     public static EnemyCreater instance;
     [SerializeField] public List<SingleCreateEnemyConfig> cfgCreateEnemy;
     public List<bool> createdEnemy;
@@ -34,6 +36,7 @@ public class EnemyCreater : MonoBehaviour
 
     private void Start()
     {
+        _cancellationTokenSource = new CancellationTokenSource();
         curLevel = GetComponent<LevelSelect>().curLevelID;
         cfgCreateEnemy = GameManager.instance.allCfgData.CfgCreateEnemy.DataList;
         createdEnemy = new List<bool>();
@@ -86,7 +89,12 @@ public class EnemyCreater : MonoBehaviour
         //    }
         //}
     }
-
+    void OnDestroy()
+    {
+        // 当 GameObject 销毁(如游戏停止)时取消任务
+        _cancellationTokenSource?.Cancel();
+        _cancellationTokenSource?.Dispose();
+    }
     public void OnGameTimeChange(float gameTime)
     {
         int waveId = -1;
@@ -134,7 +142,15 @@ public class EnemyCreater : MonoBehaviour
                 Vector3 pos = new Vector3(cfgCreateEnemy.Position[j], cfgCreateEnemy.Position[j + 1], 0);
                 CreateEnemy(cfgCreateEnemy, cfgCreateWave, pos, true);
             }
-            await Task.Delay((int)(TimeInterval * 1000));
+            try
+            {
+                await Task.Delay((int)(TimeInterval * 1000), _cancellationTokenSource.Token);
+            }
+            catch(TaskCanceledException)
+            {
+                return;
+            }
+            
         }
         List<int> randomPos = new(cfgCreateEnemy.Position);
         for (int i = 0; i < num2; i++)