Nnecode
- 2024年5月14日
- 注册于 2021年3月3日
补充下,这样做虽然vs中能显示代码,但还是不推荐用vs,除非能解决在unity项目中创建脚本时dotnet项目能实时更新,以及解决vs对引用文件夹“简陋”的操作,无法像rider那样直接像操作源文件那样操作。所以还是用rider吧。
- 已编辑
假如客户端和服务端有两个添加了相同[Invoke(TimerInvokeType.xxx)]特性的类, 启动时会造成如题异常, 个人理解是由于7.0机器人合并到服务端且客户端能跑服务端, 如果服务器和客户端存在相同特性事件会造成触发客户端同时又触发了服务端, 反之也一样, 为了避免这种情况必须客户端和服务端分开了, 所以报异常的小伙伴只需要把客户端和服务端的Invoke分开下就能解决(6.0是[Timer(TimerType.xxxx)]), 如果理解有误希望指正
请教下,ETCancellationToken这个如何正确复用,在看ETCancellationToken实现时,当调用ETCancellationToken.Cancel()方法会将成员变量actions设置为null,这导致ETCancellationToken在取消操作后无法继续使用,只能new一个新实例使用了,能否将ETCancellationToken.Invoke()方法中actions的置空操作(this.actions = null)改为clear操作(this.actions.clear()) ,这样在释放后复用不会报空指针,如果复用的话这样做正确吗
- 最佳回复由 Scorpio 选择
Scorpio 感谢,我的疑惑是Action如何转换为ETTask,不好意思我没有表述清楚,然后仔细看了下原来在
private void Run(TimerAction timerAction) { switch (timerAction.TimerClass) { case TimerClass.OnceWaitTimer: { ETTask<bool> tcs = timerAction.Callback as ETTask<bool>; this.Remove(timerAction.Id); tcs.SetResult(true); break; } case TimerClass.OnceTimer: { Action action = timerAction.Callback as Action; this.Remove(timerAction.Id); action?.Invoke(); break; } case TimerClass.RepeatedTimer: { Action action = timerAction.Callback as Action; long tillTime = TimeHelper.ServerNow() + timerAction.Time; this.AddTimer(tillTime, timerAction); action?.Invoke(); break; } } }
中根据TimerClass类型来区分了TimerAction结构体中Callback的类型,这样在switch语句的后两个case语句就将Callback 转成了Action了,解答了我的疑惑.
标题:
代码为
case TimerClass.OnceWaitTimer:
{
ETTask<bool> tcs = timerAction.Callback as ETTask<bool>;
this.Remove(timerAction.Id);
tcs.SetResult(true);
break;
}
不是很明白ETTask<bool> tcs = timerAction.Callback as ETTask<bool>; 这里是如何转成ETTask的- 已编辑
Entity在添加组件时遇到组件重复添加到Components中 异常信息 : An item with the same key has already been added
由于反序列化了组件后 , 没有设置Domain就进行了其他添加Component操作导致出现问题 , 解决办法就是在组件反序列化后第一时间设置Domain在进行其他操作即可