Просмотр исходного кода

用async ETVoid取代async void,避免使用async void。
async void,async ETVoid更简单,性能更好。
async ETVoid处理了async void无法捕获异常问题,async ETVoid会Log.Error(e),在AsyncETVoidMethodBuilder中SetException中处理

tanghai 7 лет назад
Родитель
Сommit
dd6d3536e7
48 измененных файлов с 360 добавлено и 198 удалено
  1. 0 1
      Server/App/Program.cs
  2. 6 1
      Server/Hotfix/Handler/C2M_ReloadHandler.cs
  3. 6 1
      Server/Hotfix/Handler/G2G_LockRequestHandler.cs
  4. 2 2
      Server/Hotfix/Module/Actor/MailBoxComponentSystem.cs
  5. 6 1
      Server/Hotfix/Module/ActorLocation/ActorLocationSenderComponentSystem.cs
  6. 8 3
      Server/Hotfix/Module/ActorLocation/ActorLocationSenderSystem.cs
  7. 6 1
      Server/Hotfix/Module/ActorLocation/ObjectGetRequestHandler.cs
  8. 1 1
      Server/Hotfix/Module/ActorLocation/ObjectLockRequestHandler.cs
  9. 2 2
      Server/Hotfix/Module/Benchmark/BenchmarkComponentSystem.cs
  10. 2 2
      Server/Hotfix/Module/Benchmark/WebSocketBenchmarkComponentSystem.cs
  11. 2 2
      Server/Hotfix/Module/BigWorld/LockComponentSystem.cs
  12. 1 1
      Server/Hotfix/Module/DB/DBProxyComponentSystem.cs
  13. 6 1
      Server/Hotfix/Module/DB/DBQueryBatchRequestHandler.cs
  14. 6 1
      Server/Hotfix/Module/DB/DBQueryJsonRequestHandler.cs
  15. 6 1
      Server/Hotfix/Module/DB/DBQueryRequestHandler.cs
  16. 6 1
      Server/Hotfix/Module/DB/DBSaveBatchRequestHandler.cs
  17. 6 1
      Server/Hotfix/Module/DB/DBSaveRequestHandler.cs
  18. 6 1
      Server/Hotfix/Module/Demo/C2G_EnterMapHandler.cs
  19. 6 1
      Server/Hotfix/Module/Demo/C2R_LoginHandler.cs
  20. 1 1
      Server/Hotfix/Module/Demo/Frame_ClickMapHandler.cs
  21. 6 1
      Server/Hotfix/Module/Demo/G2M_CreateUnitHandler.cs
  22. 2 2
      Server/Hotfix/Module/Demo/UnitPathComponentSystem.cs
  23. 6 1
      Server/Hotfix/Module/Message/OuterMessageDispatcher.cs
  24. 2 2
      Server/Model/Component/AppManagerComponent.cs
  25. 1 1
      Server/Model/Module/ActorLocation/LocationComponent.cs
  26. 6 1
      Server/Model/Module/DB/DBTaskQueue.cs
  27. 2 2
      Server/Model/Module/Demo/GateSessionKeyComponent.cs
  28. 2 2
      Server/Model/Module/Http/HttpComponent.cs
  29. 8 2
      Server/Model/Server.Model.csproj
  30. 3 3
      Unity/Assets/Editor/ServerManagerEditor/ServerManagerEditor.cs
  31. 1 1
      Unity/Assets/Hotfix/Module/Demo/M2C_PathfindingResultHandler.cs
  32. 2 2
      Unity/Assets/Hotfix/Module/Demo/OperaComponent.cs
  33. 4 47
      Unity/Assets/Hotfix/UI/UILobby/Component/UILobbyComponent.cs
  34. 6 1
      Unity/Assets/Hotfix/UI/UILogin/Component/UILoginComponent.cs
  35. 20 19
      Unity/Assets/Model/Base/Async/AsyncETTaskMethodBuilder.cs
  36. 1 1
      Unity/Assets/Model/Base/Async/AsyncETTaskMethodBuilder.cs.meta
  37. 83 0
      Unity/Assets/Model/Base/Async/AsyncETVoidMethodBuilder.cs
  38. 11 0
      Unity/Assets/Model/Base/Async/AsyncETVoidMethodBuilder.cs.meta
  39. 26 65
      Unity/Assets/Model/Base/Async/ETTask.cs
  40. 41 0
      Unity/Assets/Model/Base/Async/ETVoid.cs
  41. 11 0
      Unity/Assets/Model/Base/Async/ETVoid.cs.meta
  42. 6 6
      Unity/Assets/Model/Component/TimerComponent.cs
  43. 6 1
      Unity/Assets/Model/Init.cs
  44. 1 1
      Unity/Assets/Model/Module/Demo/UnitPathComponent.cs
  45. 6 6
      Unity/Assets/Model/Module/Message/Network/WebSocket/WChannel.cs
  46. 3 3
      Unity/Assets/Model/Module/Message/Network/WebSocket/WService.cs
  47. 6 1
      Unity/Assets/Model/UI/UILoading/Component/UILoadingComponent.cs
  48. 3 1
      Unity/Unity.Model.csproj

+ 0 - 1
Server/App/Program.cs

@@ -102,7 +102,6 @@ namespace App
 						Game.Scene.AddComponent<RealmGateAddressComponent>();
 						Game.Scene.AddComponent<GateSessionKeyComponent>();
 						Game.Scene.AddComponent<ConfigComponent>();
-						//Game.Scene.AddComponent<ServerFrameComponent>();
 						Game.Scene.AddComponent<PathfindingComponent>();
 						// Game.Scene.AddComponent<HttpComponent>();
 						break;

+ 6 - 1
Server/Hotfix/Handler/C2M_ReloadHandler.cs

@@ -6,7 +6,12 @@ namespace ETHotfix
 	[MessageHandler(AppType.Manager)]
 	public class C2M_ReloadHandler: AMRpcHandler<C2M_Reload, M2C_Reload>
 	{
-		protected override async void Run(Session session, C2M_Reload message, Action<M2C_Reload> reply)
+		protected override void Run(Session session, C2M_Reload message, Action<M2C_Reload> reply)
+		{
+			RunAsync(session, message, reply).NoAwait();
+		}
+		
+		private async ETVoid RunAsync(Session session, C2M_Reload message, Action<M2C_Reload> reply)
 		{
 			M2C_Reload response = new M2C_Reload();
 			if (message.Account != "panda" && message.Password != "panda")

+ 6 - 1
Server/Hotfix/Handler/G2G_LockRequestHandler.cs

@@ -6,7 +6,12 @@ namespace ETHotfix
 	[MessageHandler(AppType.Gate)]
 	public class G2G_LockRequestHandler : AMRpcHandler<G2G_LockRequest, G2G_LockResponse>
 	{
-		protected override async void Run(Session session, G2G_LockRequest message, Action<G2G_LockResponse> reply)
+		protected override void Run(Session session, G2G_LockRequest message, Action<G2G_LockResponse> reply)
+		{
+			RunAsync(session, message, reply).NoAwait();
+		}
+		
+		protected async ETVoid RunAsync(Session session, G2G_LockRequest message, Action<G2G_LockResponse> reply)
 		{
 			G2G_LockResponse response = new G2G_LockResponse();
 			try

+ 2 - 2
Server/Hotfix/Module/Actor/MailBoxComponentSystem.cs

@@ -30,7 +30,7 @@ namespace ETHotfix
 	{
 		public override void Start(MailBoxComponent self)
 		{
-			self.HandleAsync();
+			self.HandleAsync().NoAwait();
 		}
 	}
 
@@ -74,7 +74,7 @@ namespace ETHotfix
 			return self.Tcs.Task;
 		}
 
-		public static async void HandleAsync(this MailBoxComponent self)
+		public static async ETVoid HandleAsync(this MailBoxComponent self)
 		{
 			ActorMessageDispatherComponent actorMessageDispatherComponent = Game.Scene.GetComponent<ActorMessageDispatherComponent>();
 			

+ 6 - 1
Server/Hotfix/Module/ActorLocation/ActorLocationSenderComponentSystem.cs

@@ -6,8 +6,13 @@ namespace ETHotfix
     [ObjectSystem]
     public class ActorLocationSenderComponentSystem : StartSystem<ActorLocationSenderComponent>
     {
+        public override void Start(ActorLocationSenderComponent self)
+        {
+            StartAsync(self).NoAwait();
+        }
+        
         // 每10s扫描一次过期的actorproxy进行回收,过期时间是1分钟
-        public override async void Start(ActorLocationSenderComponent self)
+        public async ETVoid StartAsync(ActorLocationSenderComponent self)
         {
             List<long> timeoutActorProxyIds = new List<long>();
 

+ 8 - 3
Server/Hotfix/Module/ActorLocation/ActorLocationSenderSystem.cs

@@ -22,7 +22,12 @@ namespace ETHotfix
     [ObjectSystem]
     public class ActorLocationSenderStartSystem : StartSystem<ActorLocationSender>
     {
-        public override async void Start(ActorLocationSender self)
+	    public override void Start(ActorLocationSender self)
+	    {
+		    StartAsync(self).NoAwait();
+	    }
+	    
+        public async ETVoid StartAsync(ActorLocationSender self)
         {
             self.ActorId = await Game.Scene.GetComponent<LocationProxyComponent>().Get(self.Id);
 
@@ -30,7 +35,7 @@ namespace ETHotfix
                     .Get(IdGenerater.GetAppIdFromId(self.ActorId))
                     .GetComponent<InnerConfig>().IPEndPoint;
 
-            self.UpdateAsync();
+            self.UpdateAsync().NoAwait();
         }
     }
 	
@@ -103,7 +108,7 @@ namespace ETHotfix
 			return self.Tcs.Task;
 		}
 
-		public static async void UpdateAsync(this ActorLocationSender self)
+		public static async ETVoid UpdateAsync(this ActorLocationSender self)
 		{
 			try
 			{

+ 6 - 1
Server/Hotfix/Module/ActorLocation/ObjectGetRequestHandler.cs

@@ -6,7 +6,12 @@ namespace ETHotfix
 	[MessageHandler(AppType.Location)]
 	public class ObjectGetRequestHandler : AMRpcHandler<ObjectGetRequest, ObjectGetResponse>
 	{
-		protected override async void Run(Session session, ObjectGetRequest message, Action<ObjectGetResponse> reply)
+		protected override void Run(Session session, ObjectGetRequest message, Action<ObjectGetResponse> reply)
+		{
+			RunAsync(session, message, reply).NoAwait();
+		}
+		
+		private async ETVoid RunAsync(Session session, ObjectGetRequest message, Action<ObjectGetResponse> reply)
 		{
 			ObjectGetResponse response = new ObjectGetResponse();
 			try

+ 1 - 1
Server/Hotfix/Module/ActorLocation/ObjectLockRequestHandler.cs

@@ -11,7 +11,7 @@ namespace ETHotfix
 			ObjectLockResponse response = new ObjectLockResponse();
 			try
 			{
-				Game.Scene.GetComponent<LocationComponent>().Lock(message.Key, message.InstanceId, message.Time);
+				Game.Scene.GetComponent<LocationComponent>().Lock(message.Key, message.InstanceId, message.Time).NoAwait();
 				reply(response);
 			}
 			catch (Exception e)

+ 2 - 2
Server/Hotfix/Module/Benchmark/BenchmarkComponentSystem.cs

@@ -24,7 +24,7 @@ namespace ETHotfix
 				NetOuterComponent networkComponent = Game.Scene.GetComponent<NetOuterComponent>();
 				for (int i = 0; i < 1000; i++)
 				{
-					self.TestAsync(networkComponent, ipEndPoint, i);
+					self.TestAsync(networkComponent, ipEndPoint, i).NoAwait();
 				}
 			}
 			catch (Exception e)
@@ -33,7 +33,7 @@ namespace ETHotfix
 			}
 		}
 
-		public static async void TestAsync(this BenchmarkComponent self, NetOuterComponent networkComponent, IPEndPoint ipEndPoint, int j)
+		public static async ETVoid TestAsync(this BenchmarkComponent self, NetOuterComponent networkComponent, IPEndPoint ipEndPoint, int j)
 		{
 			try
 			{

+ 2 - 2
Server/Hotfix/Module/Benchmark/WebSocketBenchmarkComponentSystem.cs

@@ -22,7 +22,7 @@ namespace ETHotfix
 				NetOuterComponent networkComponent = Game.Scene.GetComponent<NetOuterComponent>();
 				for (int i = 0; i < 1000; i++)
 				{
-					self.TestAsync(networkComponent, i, address);
+					self.TestAsync(networkComponent, i, address).NoAwait();
 				}
 			}
 			catch (Exception e)
@@ -31,7 +31,7 @@ namespace ETHotfix
 			}
 		}
 		
-		public static async void TestAsync(this WebSocketBenchmarkComponent self, NetOuterComponent networkComponent, int j, string address)
+		public static async ETVoid TestAsync(this WebSocketBenchmarkComponent self, NetOuterComponent networkComponent, int j, string address)
 		{
 			try
 			{

+ 2 - 2
Server/Hotfix/Module/BigWorld/LockComponentSystem.cs

@@ -49,7 +49,7 @@ namespace ETHotfix
 			}
 			else
 			{
-				self.RequestLock();
+				self.RequestLock().NoAwait();
 				await self.WaitLock();
 			}
 		}
@@ -66,7 +66,7 @@ namespace ETHotfix
 			return tcs.Task;
 		}
 
-		private static async void RequestLock(this LockComponent self)
+		private static async ETVoid RequestLock(this LockComponent self)
 		{
 			try
 			{

+ 1 - 1
Server/Hotfix/Module/DB/DBProxyComponentSystem.cs

@@ -49,7 +49,7 @@ namespace ETHotfix
 			await session.Call(new DBSaveRequest { Component = component, NeedCache = needCache}, cancellationToken);
 		}
 
-		public static async void SaveLog(this DBProxyComponent self, ComponentWithId component)
+		public static async ETVoid SaveLog(this DBProxyComponent self, ComponentWithId component)
 		{
 			Session session = Game.Scene.GetComponent<NetInnerComponent>().Get(self.dbAddress);
 			await session.Call(new DBSaveRequest { Component = component,  NeedCache = false, CollectionName = "Log" });

+ 6 - 1
Server/Hotfix/Module/DB/DBQueryBatchRequestHandler.cs

@@ -7,7 +7,12 @@ namespace ETHotfix
 	[MessageHandler(AppType.DB)]
 	public class DBQueryBatchRequestHandler : AMRpcHandler<DBQueryBatchRequest, DBQueryBatchResponse>
 	{
-		protected override async void Run(Session session, DBQueryBatchRequest message, Action<DBQueryBatchResponse> reply)
+		protected override void Run(Session session, DBQueryBatchRequest message, Action<DBQueryBatchResponse> reply)
+		{
+			RunAsync(session, message, reply).NoAwait();
+		}
+		
+		protected async ETVoid RunAsync(Session session, DBQueryBatchRequest message, Action<DBQueryBatchResponse> reply)
 		{
 			DBQueryBatchResponse response = new DBQueryBatchResponse();
 			try

+ 6 - 1
Server/Hotfix/Module/DB/DBQueryJsonRequestHandler.cs

@@ -7,7 +7,12 @@ namespace ETHotfix
 	[MessageHandler(AppType.DB)]
 	public class DBQueryJsonRequestHandler : AMRpcHandler<DBQueryJsonRequest, DBQueryJsonResponse>
 	{
-		protected override async void Run(Session session, DBQueryJsonRequest message, Action<DBQueryJsonResponse> reply)
+		protected override void Run(Session session, DBQueryJsonRequest message, Action<DBQueryJsonResponse> reply)
+		{
+			RunAsync(session, message, reply).NoAwait();
+		}
+		
+		protected async ETVoid RunAsync(Session session, DBQueryJsonRequest message, Action<DBQueryJsonResponse> reply)
 		{
 			DBQueryJsonResponse response = new DBQueryJsonResponse();
 			try

+ 6 - 1
Server/Hotfix/Module/DB/DBQueryRequestHandler.cs

@@ -6,7 +6,12 @@ namespace ETHotfix
 	[MessageHandler(AppType.DB)]
 	public class DBQueryRequestHandler : AMRpcHandler<DBQueryRequest, DBQueryResponse>
 	{
-		protected override async void Run(Session session, DBQueryRequest message, Action<DBQueryResponse> reply)
+		protected override void Run(Session session, DBQueryRequest message, Action<DBQueryResponse> reply)
+		{
+			RunAsync(session, message, reply).NoAwait();
+		}
+		
+		protected async ETVoid RunAsync(Session session, DBQueryRequest message, Action<DBQueryResponse> reply)
 		{
 			DBQueryResponse response = new DBQueryResponse();
 			try

+ 6 - 1
Server/Hotfix/Module/DB/DBSaveBatchRequestHandler.cs

@@ -6,7 +6,12 @@ namespace ETHotfix
 	[MessageHandler(AppType.DB)]
 	public class DBSaveBatchRequestHandler : AMRpcHandler<DBSaveBatchRequest, DBSaveBatchResponse>
 	{
-		protected override async void Run(Session session, DBSaveBatchRequest message, Action<DBSaveBatchResponse> reply)
+		protected override void Run(Session session, DBSaveBatchRequest message, Action<DBSaveBatchResponse> reply)
+		{
+			RunAsync(session, message, reply).NoAwait();
+		}
+		
+		protected async ETVoid RunAsync(Session session, DBSaveBatchRequest message, Action<DBSaveBatchResponse> reply)
 		{
 			DBSaveBatchResponse response = new DBSaveBatchResponse();
 			try

+ 6 - 1
Server/Hotfix/Module/DB/DBSaveRequestHandler.cs

@@ -6,7 +6,12 @@ namespace ETHotfix
 	[MessageHandler(AppType.DB)]
 	public class DBSaveRequestHandler : AMRpcHandler<DBSaveRequest, DBSaveResponse>
 	{
-		protected override async void Run(Session session, DBSaveRequest message, Action<DBSaveResponse> reply)
+		protected override void Run(Session session, DBSaveRequest message, Action<DBSaveResponse> reply)
+		{
+			RunAsync(session, message, reply).NoAwait();
+		}
+		
+		protected async ETVoid RunAsync(Session session, DBSaveRequest message, Action<DBSaveResponse> reply)
 		{
 			DBSaveResponse response = new DBSaveResponse();
 			try

+ 6 - 1
Server/Hotfix/Module/Demo/C2G_EnterMapHandler.cs

@@ -7,7 +7,12 @@ namespace ETHotfix
 	[MessageHandler(AppType.Gate)]
 	public class C2G_EnterMapHandler : AMRpcHandler<C2G_EnterMap, G2C_EnterMap>
 	{
-		protected override async void Run(Session session, C2G_EnterMap message, Action<G2C_EnterMap> reply)
+		protected override void Run(Session session, C2G_EnterMap message, Action<G2C_EnterMap> reply)
+		{
+			RunAsync(session, message, reply).NoAwait();
+		}
+		
+		protected async ETVoid RunAsync(Session session, C2G_EnterMap message, Action<G2C_EnterMap> reply)
 		{
 			G2C_EnterMap response = new G2C_EnterMap();
 			try

+ 6 - 1
Server/Hotfix/Module/Demo/C2R_LoginHandler.cs

@@ -8,7 +8,12 @@ namespace ETHotfix
 	[MessageHandler(AppType.Realm)]
 	public class C2R_LoginHandler : AMRpcHandler<C2R_Login, R2C_Login>
 	{
-		protected override async void Run(Session session, C2R_Login message, Action<R2C_Login> reply)
+		protected override void Run(Session session, C2R_Login message, Action<R2C_Login> reply)
+		{
+			RunAsync(session, message, reply).NoAwait();
+		}
+
+		private async ETVoid RunAsync(Session session, C2R_Login message, Action<R2C_Login> reply)
 		{
 			R2C_Login response = new R2C_Login();
 			try

+ 1 - 1
Server/Hotfix/Module/Demo/Frame_ClickMapHandler.cs

@@ -10,7 +10,7 @@ namespace ETHotfix
 		protected override void Run(Unit unit, Frame_ClickMap message)
 		{
 			Vector3 target = new Vector3(message.X, message.Y, message.Z);
-			unit.GetComponent<UnitPathComponent>().MoveTo(target);
+			unit.GetComponent<UnitPathComponent>().MoveTo(target).NoAwait();
 			
 		}
 	}

+ 6 - 1
Server/Hotfix/Module/Demo/G2M_CreateUnitHandler.cs

@@ -7,7 +7,12 @@ namespace ETHotfix
 	[MessageHandler(AppType.Map)]
 	public class G2M_CreateUnitHandler : AMRpcHandler<G2M_CreateUnit, M2G_CreateUnit>
 	{
-		protected override async void Run(Session session, G2M_CreateUnit message, Action<M2G_CreateUnit> reply)
+		protected override void Run(Session session, G2M_CreateUnit message, Action<M2G_CreateUnit> reply)
+		{
+			RunAsync(session, message, reply).NoAwait();
+		}
+		
+		protected async ETVoid RunAsync(Session session, G2M_CreateUnit message, Action<M2G_CreateUnit> reply)
 		{
 			M2G_CreateUnit response = new M2G_CreateUnit();
 			try

+ 2 - 2
Server/Hotfix/Module/Demo/UnitPathComponentSystem.cs

@@ -26,8 +26,8 @@ namespace ETHotfix
                 await self.Entity.GetComponent<MoveComponent>().MoveToAsync(v3, self.CancellationTokenSource.Token);
             }
         }
-
-        public static async void MoveTo(this UnitPathComponent self, Vector3 target)
+        
+        public static async ETVoid MoveTo(this UnitPathComponent self, Vector3 target)
         {
             if ((self.Target - target).magnitude < 0.1f)
             {

+ 6 - 1
Server/Hotfix/Module/Message/OuterMessageDispatcher.cs

@@ -6,7 +6,12 @@ namespace ETHotfix
 {
 	public class OuterMessageDispatcher: IMessageDispatcher
 	{
-		public async void Dispatch(Session session, ushort opcode, object message)
+		public void Dispatch(Session session, ushort opcode, object message)
+		{
+			DispatchAsync(session, opcode, message).NoAwait();
+		}
+		
+		public async ETVoid DispatchAsync(Session session, ushort opcode, object message)
 		{
 			try
 			{

+ 2 - 2
Server/Model/Component/AppManagerComponent.cs

@@ -41,7 +41,7 @@ namespace ETModel
 				StartProcess(startConfig.AppId);
 			}
 
-			this.WatchProcessAsync();
+			this.WatchProcessAsync().NoAwait();
 		}
 
 		private void StartProcess(int appId)
@@ -71,7 +71,7 @@ namespace ETModel
 		/// <summary>
 		/// 监控启动的进程,如果进程挂掉了,重新拉起
 		/// </summary>
-		private async void WatchProcessAsync()
+		private async ETVoid WatchProcessAsync()
 		{
 			long instanceId = this.InstanceId;
 			

+ 1 - 1
Server/Model/Module/ActorLocation/LocationComponent.cs

@@ -79,7 +79,7 @@ namespace ETModel
 			return instanceId;
 		}
 
-		public async void Lock(long key, long instanceId, int time = 0)
+		public async ETVoid Lock(long key, long instanceId, int time = 0)
 		{
 			if (this.lockDict.ContainsKey(key))
 			{

+ 6 - 1
Server/Model/Module/DB/DBTaskQueue.cs

@@ -16,7 +16,12 @@ namespace ETModel
 	[ObjectSystem]
 	public class DbTaskQueueStartSystem : StartSystem<DBTaskQueue>
 	{
-		public override async void Start(DBTaskQueue self)
+		public override void Start(DBTaskQueue self)
+		{
+			StartAsync(self).NoAwait();
+		}
+		
+		public async ETVoid StartAsync(DBTaskQueue self)
 		{
 			long instanceId = self.InstanceId;
 			

+ 2 - 2
Server/Model/Module/Demo/GateSessionKeyComponent.cs

@@ -9,7 +9,7 @@ namespace ETModel
 		public void Add(long key, string account)
 		{
 			this.sessionKey.Add(key, account);
-			this.TimeoutRemoveKey(key);
+			this.TimeoutRemoveKey(key).NoAwait();
 		}
 
 		public string Get(long key)
@@ -24,7 +24,7 @@ namespace ETModel
 			this.sessionKey.Remove(key);
 		}
 
-		private async void TimeoutRemoveKey(long key)
+		private async ETVoid TimeoutRemoveKey(long key)
 		{
 			await Game.Scene.GetComponent<TimerComponent>().WaitAsync(20000);
 			this.sessionKey.Remove(key);

+ 2 - 2
Server/Model/Module/Http/HttpComponent.cs

@@ -120,7 +120,7 @@ namespace ETModel
 
 				this.listener.Start();
 
-				this.Accept();
+				this.Accept().NoAwait();
 			}
 			catch (HttpListenerException e)
 			{
@@ -174,7 +174,7 @@ namespace ETModel
 			}
 		}
 
-		public async void Accept()
+		public async ETVoid Accept()
 		{
 			long instanceId = this.InstanceId;
 			

+ 8 - 2
Server/Model/Server.Model.csproj

@@ -20,8 +20,11 @@
   </PropertyGroup>
   <ItemGroup>
     <Compile Remove="Libs\**" />
-    <Compile Include="..\..\Unity\Assets\Model\Base\Async\ETAsyncTaskMethodBuilder.cs">
-      <Link>Base\Async\ETAsyncTaskMethodBuilder.cs</Link>
+    <Compile Include="..\..\Unity\Assets\Model\Base\Async\AsyncETTaskMethodBuilder.cs">
+      <Link>Base\Async\AsyncETTaskMethodBuilder.cs</Link>
+    </Compile>
+    <Compile Include="..\..\Unity\Assets\Model\Base\Async\AsyncETVoidMethodBuilder.cs">
+      <Link>Base\Async\AsyncETVoidMethodBuilder.cs</Link>
     </Compile>
     <Compile Include="..\..\Unity\Assets\Model\Base\Async\ETTask.cs">
       <Link>Base\Async\ETTask.cs</Link>
@@ -32,6 +35,9 @@
     <Compile Include="..\..\Unity\Assets\Model\Base\Async\ETTaskFactory.cs">
       <Link>Base\Async\ETTaskFactory.cs</Link>
     </Compile>
+    <Compile Include="..\..\Unity\Assets\Model\Base\Async\ETVoid.cs">
+      <Link>Base\Async\ETVoid.cs</Link>
+    </Compile>
     <Compile Include="..\..\Unity\Assets\Model\Base\Async\IAwaiter.cs">
       <Link>Base\Async\IAwaiter.cs</Link>
     </Compile>

+ 3 - 3
Unity/Assets/Editor/ServerManagerEditor/ServerManagerEditor.cs

@@ -43,13 +43,13 @@ namespace ETEditor
 					return;
 				}
 
-				Reload(this.managerAddress, this.account, this.password);
+				ReloadAsync(this.managerAddress, this.account, this.password).NoAwait();
 			}
 			
 			GUILayout.EndHorizontal();
 		}
-
-		private static async void Reload(string address, string account, string password)
+		
+		private static async ETVoid ReloadAsync(string address, string account, string password)
 		{
 			using (Session session = Game.Scene.GetComponent<NetOuterComponent>().Create(address))
 			{

+ 1 - 1
Unity/Assets/Hotfix/Module/Demo/M2C_PathfindingResultHandler.cs

@@ -12,7 +12,7 @@ namespace ETHotfix
 			
 			UnitPathComponent unitPathComponent = unit.GetComponent<UnitPathComponent>();
 
-			unitPathComponent.StartMove(message);
+			unitPathComponent.StartMove(message).NoAwait();
 
 			GizmosDebug.Instance.Path.Clear();
 			GizmosDebug.Instance.Path.Add(new Vector3(message.X, message.Y, message.Z));

+ 2 - 2
Unity/Assets/Hotfix/Module/Demo/OperaComponent.cs

@@ -50,12 +50,12 @@ namespace ETHotfix
 		            ETModel.SessionComponent.Instance.Session.Send(frameClickMap);
 
 					// 测试actor rpc消息
-					this.TestActor();
+					this.TestActor().NoAwait();
 				}
             }
         }
 
-	    public async void TestActor()
+	    public async ETVoid TestActor()
 	    {
 		    try
 		    {

+ 4 - 47
Unity/Assets/Hotfix/UI/UILobby/Component/UILobbyComponent.cs

@@ -22,15 +22,6 @@ namespace ETHotfix
 		public void Awake()
 		{
 			ReferenceCollector rc = this.GetParent<UI>().GameObject.GetComponent<ReferenceCollector>();
-			GameObject sendBtn = rc.Get<GameObject>("Send");
-			GameObject sendRpcBtn = rc.Get<GameObject>("" + "SendRpc");
-			sendBtn.GetComponent<Button>().onClick.Add(this.OnSend);
-			sendRpcBtn.GetComponent<Button>().onClick.Add(this.OnSendRpc);
-
-			GameObject transfer1Btn = rc.Get<GameObject>("Transfer1");
-			GameObject transfer2Btn = rc.Get<GameObject>("Transfer2");
-			transfer1Btn.GetComponent<Button>().onClick.Add(this.OnTransfer1);
-			transfer2Btn.GetComponent<Button>().onClick.Add(this.OnTransfer2);
 			
 			enterMap = rc.Get<GameObject>("EnterMap");
 			enterMap.GetComponent<Button>().onClick.Add(this.EnterMap);
@@ -38,46 +29,12 @@ namespace ETHotfix
 			this.text = rc.Get<GameObject>("Text").GetComponent<Text>();
 		}
 
-		private void OnSend()
+		private void EnterMap()
 		{
-			// 发送一个actor消息
-			ETModel.SessionComponent.Instance.Session.Send(new Actor_Test() { Info = "message client->gate->map->gate->client" });
+			EnterMapAsync().NoAwait();
 		}
-
-		private async void OnSendRpc()
-		{
-			try
-			{
-				// 向actor发起一次rpc调用
-				Actor_TestResponse response = (Actor_TestResponse) await ETModel.SessionComponent.Instance.Session.Call(new Actor_TestRequest() { Request = "request actor test rpc" });
-				Log.Info($"recv response: {JsonHelper.ToJson(response)}");
-			}
-			catch (Exception e)
-			{
-				Log.Error(e);
-			}
-		}
-
-		private async void OnTransfer1()
-		{
-			try
-			{
-				Actor_TransferResponse response = (Actor_TransferResponse) await ETModel.SessionComponent.Instance.Session.Call(new Actor_TransferRequest() {MapIndex = 0});
-				Log.Info($"传送成功! {JsonHelper.ToJson(response)}");
-			}
-			catch (Exception e)
-			{
-				Log.Error(e);
-			}
-		}
-
-		private async void OnTransfer2()
-		{
-			Actor_TransferResponse response = (Actor_TransferResponse)await ETModel.SessionComponent.Instance.Session.Call(new Actor_TransferRequest() { MapIndex = 1 });
-			Log.Info($"传送成功! {JsonHelper.ToJson(response)}");
-		}
-
-		private async void EnterMap()
+		
+		private async ETVoid EnterMapAsync()
 		{
 			try
 			{

+ 6 - 1
Unity/Assets/Hotfix/UI/UILogin/Component/UILoginComponent.cs

@@ -28,7 +28,12 @@ namespace ETHotfix
 			this.account = rc.Get<GameObject>("Account");
 		}
 
-		public async void OnLogin()
+		public void OnLogin()
+		{
+			OnLoginAsync().NoAwait();
+		}
+
+		public async ETVoid OnLoginAsync()
 		{
 			try
 			{

+ 20 - 19
Unity/Assets/Model/Base/Async/ETAsyncTaskMethodBuilder.cs → Unity/Assets/Model/Base/Async/AsyncETTaskMethodBuilder.cs

@@ -1,24 +1,25 @@
 using System;
+using System.Diagnostics;
 using System.Runtime.CompilerServices;
 using System.Security;
 
 namespace ETModel
 {
-    public struct ETAsyncTaskMethodBuilder
+    public struct AsyncETTaskMethodBuilder
     {
         private ETTaskCompletionSource tcs;
         private Action moveNext;
 
         // 1. Static Create method.
-        //[DebuggerHidden]
-        public static ETAsyncTaskMethodBuilder Create()
+        [DebuggerHidden]
+        public static AsyncETTaskMethodBuilder Create()
         {
-            ETAsyncTaskMethodBuilder builder = new ETAsyncTaskMethodBuilder();
+            AsyncETTaskMethodBuilder builder = new AsyncETTaskMethodBuilder();
             return builder;
         }
 
         // 2. TaskLike Task property.
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public ETTask Task
         {
             get
@@ -39,7 +40,7 @@ namespace ETModel
         }
 
         // 3. SetException
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public void SetException(Exception exception)
         {
             if (this.tcs == null)
@@ -58,7 +59,7 @@ namespace ETModel
         }
 
         // 4. SetResult
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public void SetResult()
         {
             if (moveNext == null)
@@ -76,7 +77,7 @@ namespace ETModel
         }
 
         // 5. AwaitOnCompleted
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
                 where TAwaiter : INotifyCompletion
                 where TStateMachine : IAsyncStateMachine
@@ -97,7 +98,7 @@ namespace ETModel
         }
 
         // 6. AwaitUnsafeOnCompleted
-        //[DebuggerHidden]
+        [DebuggerHidden]
         [SecuritySafeCritical]
         public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
                 where TAwaiter : ICriticalNotifyCompletion
@@ -119,14 +120,14 @@ namespace ETModel
         }
 
         // 7. Start
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public void Start<TStateMachine>(ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine
         {
             stateMachine.MoveNext();
         }
 
         // 8. SetStateMachine
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public void SetStateMachine(IAsyncStateMachine stateMachine)
         {
         }
@@ -139,7 +140,7 @@ namespace ETModel
         private Action moveNext;
 
         // 1. Static Create method.
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public static ETAsyncTaskMethodBuilder<T> Create()
         {
             var builder = new ETAsyncTaskMethodBuilder<T>();
@@ -147,7 +148,7 @@ namespace ETModel
         }
 
         // 2. TaskLike Task property.
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public ETTask<T> Task
         {
             get
@@ -168,7 +169,7 @@ namespace ETModel
         }
 
         // 3. SetException
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public void SetException(Exception exception)
         {
             if (this.tcs == null)
@@ -187,7 +188,7 @@ namespace ETModel
         }
 
         // 4. SetResult
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public void SetResult(T ret)
         {
             if (moveNext == null)
@@ -206,7 +207,7 @@ namespace ETModel
         }
 
         // 5. AwaitOnCompleted
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
                 where TAwaiter : INotifyCompletion
                 where TStateMachine : IAsyncStateMachine
@@ -227,7 +228,7 @@ namespace ETModel
         }
 
         // 6. AwaitUnsafeOnCompleted
-        //[DebuggerHidden]
+        [DebuggerHidden]
         [SecuritySafeCritical]
         public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
                 where TAwaiter : ICriticalNotifyCompletion
@@ -249,14 +250,14 @@ namespace ETModel
         }
 
         // 7. Start
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public void Start<TStateMachine>(ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine
         {
             stateMachine.MoveNext();
         }
 
         // 8. SetStateMachine
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public void SetStateMachine(IAsyncStateMachine stateMachine)
         {
         }

+ 1 - 1
Unity/Assets/Model/Base/Async/ETAsyncTaskMethodBuilder.cs.meta → Unity/Assets/Model/Base/Async/AsyncETTaskMethodBuilder.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 7680d001d37983d4594019f0dfdf29b9
+guid: a61c2db12429afb40b78a3f953e46510
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 83 - 0
Unity/Assets/Model/Base/Async/AsyncETVoidMethodBuilder.cs

@@ -0,0 +1,83 @@
+using System;
+using System.Diagnostics;
+using System.Runtime.CompilerServices;
+using System.Security;
+
+namespace ETModel
+{
+    public struct AsyncETVoidMethodBuilder
+    {
+        private Action moveNext;
+
+        // 1. Static Create method.
+        [DebuggerHidden]
+        public static AsyncETVoidMethodBuilder Create()
+        {
+            AsyncETVoidMethodBuilder builder = new AsyncETVoidMethodBuilder();
+            return builder;
+        }
+
+        // 2. TaskLike Task property(void)
+        public ETVoid Task => default;
+
+        // 3. SetException
+        [DebuggerHidden]
+        public void SetException(Exception exception)
+        {
+            Log.Error(exception);
+        }
+
+        // 4. SetResult
+        [DebuggerHidden]
+        public void SetResult()
+        {
+            // do nothing
+        }
+
+        // 5. AwaitOnCompleted
+        [DebuggerHidden]
+        public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
+            where TAwaiter : INotifyCompletion
+            where TStateMachine : IAsyncStateMachine
+        {
+            if (moveNext == null)
+            {
+                var runner = new MoveNextRunner<TStateMachine>();
+                moveNext = runner.Run;
+                runner.StateMachine = stateMachine; // set after create delegate.
+            }
+
+            awaiter.OnCompleted(moveNext);
+        }
+
+        // 6. AwaitUnsafeOnCompleted
+        [DebuggerHidden]
+        [SecuritySafeCritical]
+        public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
+            where TAwaiter : ICriticalNotifyCompletion
+            where TStateMachine : IAsyncStateMachine
+        {
+            if (moveNext == null)
+            {
+                var runner = new MoveNextRunner<TStateMachine>();
+                moveNext = runner.Run;
+                runner.StateMachine = stateMachine; // set after create delegate.
+            }
+
+            awaiter.UnsafeOnCompleted(moveNext);
+        }
+
+        // 7. Start
+        [DebuggerHidden]
+        public void Start<TStateMachine>(ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine
+        {
+            stateMachine.MoveNext();
+        }
+
+        // 8. SetStateMachine
+        [DebuggerHidden]
+        public void SetStateMachine(IAsyncStateMachine stateMachine)
+        {
+        }
+    }
+}

+ 11 - 0
Unity/Assets/Model/Base/Async/AsyncETVoidMethodBuilder.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9a7cde4b1a6c34b49a309698cdfb233f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 26 - 65
Unity/Assets/Model/Base/Async/ETTask.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Runtime.CompilerServices;
 
 namespace ETModel
@@ -7,24 +8,24 @@ namespace ETModel
     /// <summary>
     /// Lightweight unity specified task-like object.
     /// </summary>
-    [AsyncMethodBuilder(typeof (ETAsyncTaskMethodBuilder))]
+    [AsyncMethodBuilder(typeof (AsyncETTaskMethodBuilder))]
     public partial struct ETTask: IEquatable<ETTask>
     {
         private readonly IAwaiter awaiter;
 
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public ETTask(IAwaiter awaiter)
         {
             this.awaiter = awaiter;
         }
 
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public AwaiterStatus Status => awaiter?.Status ?? AwaiterStatus.Succeeded;
 
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public bool IsCompleted => awaiter?.IsCompleted ?? true;
 
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public void GetResult()
         {
             if (awaiter != null)
@@ -33,7 +34,7 @@ namespace ETModel
             }
         }
 
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public Awaiter GetAwaiter()
         {
             return new Awaiter(this);
@@ -71,69 +72,29 @@ namespace ETModel
                     : "(" + this.awaiter.Status + ")";
         }
 
-        private class IsCanceledAwaiter: IAwaiter<bool>
-        {
-            private readonly IAwaiter awaiter;
-
-            public IsCanceledAwaiter(IAwaiter awaiter)
-            {
-                this.awaiter = awaiter;
-            }
-
-            public bool IsCompleted => awaiter.IsCompleted;
-
-            public AwaiterStatus Status => awaiter.Status;
-
-            public bool GetResult()
-            {
-                if (awaiter.Status == AwaiterStatus.Canceled)
-                {
-                    return true;
-                }
-
-                awaiter.GetResult();
-                return false;
-            }
-
-            public void OnCompleted(Action continuation)
-            {
-                awaiter.OnCompleted(continuation);
-            }
-
-            public void UnsafeOnCompleted(Action continuation)
-            {
-                awaiter.UnsafeOnCompleted(continuation);
-            }
-
-            void IAwaiter.GetResult()
-            {
-                awaiter.GetResult();
-            }
-        }
-
         public struct Awaiter: IAwaiter
         {
             private readonly ETTask task;
 
-            //[DebuggerHidden]
+            [DebuggerHidden]
             public Awaiter(ETTask task)
             {
                 this.task = task;
             }
 
-            //[DebuggerHidden]
+            [DebuggerHidden]
             public bool IsCompleted => task.IsCompleted;
 
-            //[DebuggerHidden]
+            [DebuggerHidden]
             public AwaiterStatus Status => task.Status;
 
-            //[DebuggerHidden]
+            [DebuggerHidden]
             public void GetResult()
             {
                 task.GetResult();
             }
 
-            //[DebuggerHidden]
+            [DebuggerHidden]
             public void OnCompleted(Action continuation)
             {
                 if (task.awaiter != null)
@@ -146,7 +107,7 @@ namespace ETModel
                 }
             }
 
-            //[DebuggerHidden]
+            [DebuggerHidden]
             public void UnsafeOnCompleted(Action continuation)
             {
                 if (task.awaiter != null)
@@ -170,27 +131,27 @@ namespace ETModel
         private readonly T result;
         private readonly IAwaiter<T> awaiter;
 
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public ETTask(T result)
         {
             this.result = result;
             this.awaiter = null;
         }
 
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public ETTask(IAwaiter<T> awaiter)
         {
             this.result = default;
             this.awaiter = awaiter;
         }
 
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public AwaiterStatus Status => awaiter?.Status ?? AwaiterStatus.Succeeded;
 
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public bool IsCompleted => awaiter?.IsCompleted ?? true;
 
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public T Result
         {
             get
@@ -204,7 +165,7 @@ namespace ETModel
             }
         }
 
-        //[DebuggerHidden]
+        [DebuggerHidden]
         public Awaiter GetAwaiter()
         {
             return new Awaiter(this);
@@ -261,31 +222,31 @@ namespace ETModel
         {
             private readonly ETTask<T> task;
 
-            //[DebuggerHidden]
+            [DebuggerHidden]
             public Awaiter(ETTask<T> task)
             {
                 this.task = task;
             }
 
-            //[DebuggerHidden]
+            [DebuggerHidden]
             public bool IsCompleted => task.IsCompleted;
 
-            //[DebuggerHidden]
+            [DebuggerHidden]
             public AwaiterStatus Status => task.Status;
 
-            //[DebuggerHidden]
+            [DebuggerHidden]
             void IAwaiter.GetResult()
             {
                 GetResult();
             }
 
-            //[DebuggerHidden]
+            [DebuggerHidden]
             public T GetResult()
             {
                 return task.Result;
             }
 
-            //[DebuggerHidden]
+            [DebuggerHidden]
             public void OnCompleted(Action continuation)
             {
                 if (task.awaiter != null)
@@ -298,7 +259,7 @@ namespace ETModel
                 }
             }
 
-            //[DebuggerHidden]
+            [DebuggerHidden]
             public void UnsafeOnCompleted(Action continuation)
             {
                 if (task.awaiter != null)

+ 41 - 0
Unity/Assets/Model/Base/Async/ETVoid.cs

@@ -0,0 +1,41 @@
+using System;
+using System.Diagnostics;
+using System.Runtime.CompilerServices;
+
+namespace ETModel
+{
+    [AsyncMethodBuilder(typeof(AsyncETVoidMethodBuilder))]
+    public struct ETVoid
+    {
+        public void NoAwait()
+        {
+        }
+
+        [DebuggerHidden]
+        public Awaiter GetAwaiter()
+        {
+            return new Awaiter();
+        }
+
+        public struct Awaiter : ICriticalNotifyCompletion
+        {
+            [DebuggerHidden]
+            public bool IsCompleted => true;
+
+            [DebuggerHidden]
+            public void GetResult()
+            {
+            }
+
+            [DebuggerHidden]
+            public void OnCompleted(Action continuation)
+            {
+            }
+
+            [DebuggerHidden]
+            public void UnsafeOnCompleted(Action continuation)
+            {
+            }
+        }
+    }
+}

+ 11 - 0
Unity/Assets/Model/Base/Async/ETVoid.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c1427531a30db254e8587be525470b6c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 6 - 6
Unity/Assets/Model/Component/TimerComponent.cs

@@ -8,7 +8,7 @@ namespace ETModel
 	{
 		public long Id { get; set; }
 		public long Time { get; set; }
-		public ETTaskCompletionSource<bool> tcs;
+		public ETTaskCompletionSource tcs;
 	}
 
 	[ObjectSystem]
@@ -80,7 +80,7 @@ namespace ETModel
 					continue;
 				}
 				this.timers.Remove(timerId);
-				timer.tcs.TrySetResult(true);
+				timer.tcs.SetResult();
 			}
 		}
 
@@ -91,7 +91,7 @@ namespace ETModel
 
 		public ETTask WaitTillAsync(long tillTime, CancellationToken cancellationToken)
 		{
-			ETTaskCompletionSource<bool> tcs = new ETTaskCompletionSource<bool>();
+			ETTaskCompletionSource tcs = new ETTaskCompletionSource();
 			Timer timer = new Timer { Id = IdGenerater.GenerateId(), Time = tillTime, tcs = tcs };
 			this.timers[timer.Id] = timer;
 			this.timeId.Add(timer.Time, timer.Id);
@@ -105,7 +105,7 @@ namespace ETModel
 
 		public ETTask WaitTillAsync(long tillTime)
 		{
-			ETTaskCompletionSource<bool> tcs = new ETTaskCompletionSource<bool>();
+			ETTaskCompletionSource tcs = new ETTaskCompletionSource();
 			Timer timer = new Timer { Id = IdGenerater.GenerateId(), Time = tillTime, tcs = tcs };
 			this.timers[timer.Id] = timer;
 			this.timeId.Add(timer.Time, timer.Id);
@@ -118,7 +118,7 @@ namespace ETModel
 
 		public ETTask WaitAsync(long time, CancellationToken cancellationToken)
 		{
-			ETTaskCompletionSource<bool> tcs = new ETTaskCompletionSource<bool>();
+			ETTaskCompletionSource tcs = new ETTaskCompletionSource();
 			Timer timer = new Timer { Id = IdGenerater.GenerateId(), Time = TimeHelper.Now() + time, tcs = tcs };
 			this.timers[timer.Id] = timer;
 			this.timeId.Add(timer.Time, timer.Id);
@@ -132,7 +132,7 @@ namespace ETModel
 
 		public ETTask WaitAsync(long time)
 		{
-			ETTaskCompletionSource<bool> tcs = new ETTaskCompletionSource<bool>();
+			ETTaskCompletionSource tcs = new ETTaskCompletionSource();
 			Timer timer = new Timer { Id = IdGenerater.GenerateId(), Time = TimeHelper.Now() + time, tcs = tcs };
 			this.timers[timer.Id] = timer;
 			this.timeId.Add(timer.Time, timer.Id);

+ 6 - 1
Unity/Assets/Model/Init.cs

@@ -8,7 +8,12 @@ namespace ETModel
 {
 	public class Init : MonoBehaviour
 	{
-		private async void Start()
+		private void Start()
+		{
+			this.StartAsync().NoAwait();
+		}
+		
+		private async ETVoid StartAsync()
 		{
 			try
 			{ 

+ 1 - 1
Unity/Assets/Model/Module/Demo/UnitPathComponent.cs

@@ -39,7 +39,7 @@ namespace ETModel
 			}
 		}
 
-		public async void StartMove(M2C_PathfindingResult message)
+		public async ETVoid StartMove(M2C_PathfindingResult message)
 		{
 			// 取消之前的移动协程
 			this.CancellationTokenSource?.Cancel();

+ 6 - 6
Unity/Assets/Model/Module/Message/Network/WebSocket/WChannel.cs

@@ -82,8 +82,8 @@ namespace ETModel
             {
                 return;
             }
-            this.StartRecv();
-            this.StartSend();
+            this.StartRecv().NoAwait();
+            this.StartSend().NoAwait();
         }
         
         private WService GetService()
@@ -91,7 +91,7 @@ namespace ETModel
             return (WService)this.service;
         }
 
-        public async void ConnectAsync(string url)
+        public async ETVoid ConnectAsync(string url)
         {
             try
             {
@@ -114,11 +114,11 @@ namespace ETModel
 
             if (this.isConnected)
             {
-                this.StartSend();
+                this.StartSend().NoAwait();
             }
         }
 
-        public async void StartSend()
+        public async ETVoid StartSend()
         {
             if (this.IsDisposed)
             {
@@ -164,7 +164,7 @@ namespace ETModel
             }
         }
 
-        public async void StartRecv()
+        public async ETVoid StartRecv()
         {
             if (this.IsDisposed)
             {

+ 3 - 3
Unity/Assets/Model/Module/Message/Network/WebSocket/WService.cs

@@ -22,7 +22,7 @@ namespace ETModel
             
             this.httpListener = new HttpListener();
 
-            StartAccept(prefixs);
+            StartAccept(prefixs).NoAwait();
         }
         
         public WService()
@@ -47,7 +47,7 @@ namespace ETModel
 			ClientWebSocket webSocket = new ClientWebSocket();
             WChannel channel = new WChannel(webSocket, this);
             this.channels[channel.Id] = channel;
-            channel.ConnectAsync(address);
+            channel.ConnectAsync(address).NoAwait();
             return channel;
         }
 
@@ -68,7 +68,7 @@ namespace ETModel
             
         }
 
-        public async void StartAccept(IEnumerable<string> prefixs)
+        public async ETVoid StartAccept(IEnumerable<string> prefixs)
         {
             try
             {

+ 6 - 1
Unity/Assets/Model/UI/UILoading/Component/UILoadingComponent.cs

@@ -15,7 +15,12 @@ namespace ETModel
 	[ObjectSystem]
 	public class UiLoadingComponentStartSystem : StartSystem<UILoadingComponent>
 	{
-		public override async void Start(UILoadingComponent self)
+		public override void Start(UILoadingComponent self)
+		{
+			StartAsync(self).NoAwait();
+		}
+		
+		public async ETVoid StartAsync(UILoadingComponent self)
 		{
 			TimerComponent timerComponent = Game.Scene.GetComponent<TimerComponent>();
 			long instanceId = self.InstanceId;

+ 3 - 1
Unity/Unity.Model.csproj

@@ -54,11 +54,13 @@
     </Reference>
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Assets\Model\Base\Async\AsyncETTaskMethodBuilder.cs" />
+    <Compile Include="Assets\Model\Base\Async\AsyncETVoidMethodBuilder.cs" />
     <Compile Include="Assets\Model\Base\Async\AsyncMethodBuilderAttribute.cs" />
-    <Compile Include="Assets\Model\Base\Async\ETAsyncTaskMethodBuilder.cs" />
     <Compile Include="Assets\Model\Base\Async\ETTask.cs" />
     <Compile Include="Assets\Model\Base\Async\ETTaskCompletionSource.cs" />
     <Compile Include="Assets\Model\Base\Async\ETTaskFactory.cs" />
+    <Compile Include="Assets\Model\Base\Async\ETVoid.cs" />
     <Compile Include="Assets\Model\Base\Async\IAwaiter.cs" />
     <Compile Include="Assets\Model\Base\Async\MoveNextRunner.cs" />
     <Compile Include="Assets\Model\Base\DoubleMap.cs" />