diff --git a/GFramework.Core.Abstractions/architecture/IArchitecture.cs b/GFramework.Core.Abstractions/architecture/IArchitecture.cs
index e5575a9..d191b54 100644
--- a/GFramework.Core.Abstractions/architecture/IArchitecture.cs
+++ b/GFramework.Core.Abstractions/architecture/IArchitecture.cs
@@ -1,3 +1,4 @@
+using GFramework.Core.Abstractions.lifecycle;
using GFramework.Core.Abstractions.model;
using GFramework.Core.Abstractions.system;
using GFramework.Core.Abstractions.utility;
diff --git a/GFramework.Core.Abstractions/lifecycle/IAsyncDestroyable.cs b/GFramework.Core.Abstractions/lifecycle/IAsyncDestroyable.cs
new file mode 100644
index 0000000..73ee300
--- /dev/null
+++ b/GFramework.Core.Abstractions/lifecycle/IAsyncDestroyable.cs
@@ -0,0 +1,13 @@
+namespace GFramework.Core.Abstractions.lifecycle;
+
+///
+/// 定义异步销毁接口,用于需要异步清理资源的组件
+///
+public interface IAsyncDestroyable
+{
+ ///
+ /// 异步销毁方法,在组件关闭时调用
+ ///
+ /// 表示异步销毁操作的任务
+ ValueTask DestroyAsync();
+}
\ No newline at end of file
diff --git a/GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs b/GFramework.Core.Abstractions/lifecycle/IAsyncInitializable.cs
similarity index 86%
rename from GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs
rename to GFramework.Core.Abstractions/lifecycle/IAsyncInitializable.cs
index 49b6cf3..4236768 100644
--- a/GFramework.Core.Abstractions/architecture/IAsyncInitializable.cs
+++ b/GFramework.Core.Abstractions/lifecycle/IAsyncInitializable.cs
@@ -1,4 +1,4 @@
-namespace GFramework.Core.Abstractions.architecture;
+namespace GFramework.Core.Abstractions.lifecycle;
///
/// 定义异步初始化接口,用于需要异步初始化的组件或服务
diff --git a/GFramework.Core.Abstractions/lifecycle/IAsyncLifecycle.cs b/GFramework.Core.Abstractions/lifecycle/IAsyncLifecycle.cs
new file mode 100644
index 0000000..d9acc1b
--- /dev/null
+++ b/GFramework.Core.Abstractions/lifecycle/IAsyncLifecycle.cs
@@ -0,0 +1,8 @@
+namespace GFramework.Core.Abstractions.lifecycle;
+
+///
+/// 定义异步生命周期接口,组合了异步初始化和异步销毁
+///
+public interface IAsyncLifecycle : IAsyncInitializable, IAsyncDestroyable
+{
+}
\ No newline at end of file
diff --git a/GFramework.Core.Tests/model/AsyncTestModel.cs b/GFramework.Core.Tests/model/AsyncTestModel.cs
index 700229f..b4f0844 100644
--- a/GFramework.Core.Tests/model/AsyncTestModel.cs
+++ b/GFramework.Core.Tests/model/AsyncTestModel.cs
@@ -1,5 +1,5 @@
-using GFramework.Core.Abstractions.architecture;
using GFramework.Core.Abstractions.enums;
+using GFramework.Core.Abstractions.lifecycle;
using GFramework.Core.model;
namespace GFramework.Core.Tests.model;
diff --git a/GFramework.Core.Tests/state/StateMachineSystemTests.cs b/GFramework.Core.Tests/state/StateMachineSystemTests.cs
index 479be46..35e6309 100644
--- a/GFramework.Core.Tests/state/StateMachineSystemTests.cs
+++ b/GFramework.Core.Tests/state/StateMachineSystemTests.cs
@@ -133,12 +133,12 @@ public class StateMachineSystemTests
}
///
- /// 测试Destroy方法不抛出异常
+ /// 测试DestroyAsync方法不抛出异常
///
[Test]
- public void Destroy_Should_Not_Throw_Exception()
+ public async Task DestroyAsync_Should_Not_Throw_Exception()
{
- Assert.That(() => _stateMachine!.Destroy(), Throws.Nothing);
+ Assert.That(async () => await _stateMachine!.DestroyAsync(), Throws.Nothing);
}
///
diff --git a/GFramework.Core.Tests/system/AsyncTestSystem.cs b/GFramework.Core.Tests/system/AsyncTestSystem.cs
index a45d671..87e64f0 100644
--- a/GFramework.Core.Tests/system/AsyncTestSystem.cs
+++ b/GFramework.Core.Tests/system/AsyncTestSystem.cs
@@ -1,5 +1,6 @@
using GFramework.Core.Abstractions.architecture;
using GFramework.Core.Abstractions.enums;
+using GFramework.Core.Abstractions.lifecycle;
using GFramework.Core.Abstractions.system;
namespace GFramework.Core.Tests.system;
diff --git a/GFramework.Core.Tests/tests/ArchitectureTestsBase.cs b/GFramework.Core.Tests/tests/ArchitectureTestsBase.cs
index 08d349c..39d9ede 100644
--- a/GFramework.Core.Tests/tests/ArchitectureTestsBase.cs
+++ b/GFramework.Core.Tests/tests/ArchitectureTestsBase.cs
@@ -34,11 +34,14 @@ public abstract class ArchitectureTestsBase where TArchitecture :
/// 销毁架构实例并清理游戏上下文
///
[TearDown]
- public void TearDown()
+ public async Task TearDown()
{
try
{
- Architecture?.Destroy();
+ if (Architecture != null)
+ {
+ await Architecture.DestroyAsync();
+ }
}
finally
{
diff --git a/GFramework.Core.Tests/tests/AsyncArchitectureTests.cs b/GFramework.Core.Tests/tests/AsyncArchitectureTests.cs
index 85a44c4..e842259 100644
--- a/GFramework.Core.Tests/tests/AsyncArchitectureTests.cs
+++ b/GFramework.Core.Tests/tests/AsyncArchitectureTests.cs
@@ -110,7 +110,7 @@ public class AsyncArchitectureTests : ArchitectureTestsBase();
Assert.That(system, Is.Null);
diff --git a/GFramework.Core.Tests/tests/SyncArchitectureTests.cs b/GFramework.Core.Tests/tests/SyncArchitectureTests.cs
index c85142d..332666d 100644
--- a/GFramework.Core.Tests/tests/SyncArchitectureTests.cs
+++ b/GFramework.Core.Tests/tests/SyncArchitectureTests.cs
@@ -114,10 +114,10 @@ public class SyncArchitectureTests : ArchitectureTestsBase
/// 测试架构销毁功能,验证销毁后系统被正确销毁且架构进入销毁阶段
///
[Test]
- public void Architecture_Destroy_Should_Destroy_All_Systems_And_Enter_Destroyed()
+ public async Task Architecture_Destroy_Should_Destroy_All_Systems_And_Enter_Destroyed()
{
Architecture!.Initialize();
- Architecture.Destroy();
+ await Architecture.DestroyAsync();
var system = Architecture.Context.GetSystem();
Assert.That(system!.DestroyCalled, Is.True);
diff --git a/GFramework.Core/architecture/Architecture.cs b/GFramework.Core/architecture/Architecture.cs
index ee09f14..0e60ee7 100644
--- a/GFramework.Core/architecture/Architecture.cs
+++ b/GFramework.Core/architecture/Architecture.cs
@@ -114,14 +114,14 @@ public abstract class Architecture(
private readonly List _pendingInitializableList = [];
///
- /// 可销毁组件的去重集合
+ /// 可销毁组件的去重集合(支持 IDestroyable 和 IAsyncDestroyable)
///
- private readonly HashSet _disposableSet = [];
+ private readonly HashSet