Przeglądaj źródła

修复一个bug,SetCancelToken在传递canceltoken的时候,传到WithToken的ETTask就不再传了,因为可能这个ETTask设置了新的cancelToken

tanghai 1 rok temu
rodzic
commit
4b69eac0e8

+ 9 - 4
Unity/Packages/cn.etetet.core/Runtime/ETTask/ETTask.cs

@@ -13,10 +13,6 @@ namespace ET
         {
         {
             while (true)
             while (true)
             {
             {
-                if (task == null)
-                {
-                    return;
-                }
                 if (task.TaskType == TaskType.TokenTask)
                 if (task.TaskType == TaskType.TokenTask)
                 {
                 {
                     (task as ETTask<ETCancellationToken>).SetResult(cancellationToken);
                     (task as ETTask<ETCancellationToken>).SetResult(cancellationToken);
@@ -28,6 +24,15 @@ namespace ET
                 object child = task.Object;
                 object child = task.Object;
                 task.Object = cancellationToken;
                 task.Object = cancellationToken;
                 task = child as IETTask;
                 task = child as IETTask;
+                if (task == null)
+                {
+                    break;
+                }
+                //// 传递到WithToken为止,因为可能这一层设置了新的canceltoken
+                if (task.TaskType == TaskType.WithToken)
+                {
+                    break;
+                }
             }
             }
         }
         }
     }
     }

+ 10 - 0
Unity/Packages/cn.etetet.statesync/Scripts/HotfixView/Client/Opera/OperaComponentSystem.cs

@@ -40,6 +40,11 @@ namespace ET.Client
             {
             {
                 self.TestCancelAfter().Coroutine();
                 self.TestCancelAfter().Coroutine();
             }
             }
+            
+            if (Input.GetKeyDown(KeyCode.D))
+            {
+                self.TestCancelAfter2().Coroutine();
+            }
 
 
             if (Input.GetKeyDown(KeyCode.T))
             if (Input.GetKeyDown(KeyCode.T))
             {
             {
@@ -87,5 +92,10 @@ namespace ET.Client
             }
             }
             Log.Debug($"TestCancelAfter end");
             Log.Debug($"TestCancelAfter end");
         }
         }
+
+        private static async ETTask TestCancelAfter2(this OperaComponent self)
+        {
+            
+        }
     }
     }
 }
 }