Bug when subtract int on IJobParallelFor

Editor Crash when subtract.
It is ok for add.
Am i wrong?

 struct DamageWork : IJobParallelFor
    {
        [ReadOnly] public EntityCommandBuffer CommandBuffer;

        [ReadOnly] public NativeArray<Entity> entities;

        [ReadOnly] public ComponentDataFromEntity<DamageTag> damageTag;
        // [ReadOnly] public ComponentDataFromEntity<Damage> otherDamage;

        [ReadOnly] public ComponentDataFromEntity<Tag> tag;

        [NativeDisableParallelForRestriction]
        public ComponentDataFromEntity<CircleCollision> collision;
        [NativeDisableParallelForRestriction]
        public ComponentDataFromEntity<HealthPoint> healthPoint;
        [NativeDisableParallelForRestriction] public ComponentDataFromEntity<Damage> otherDamage;

        public void Execute(int index)
        {
         CircleCollision receiverCol = collision[entities[index]];

            if (collision[entities[index]].hit)
            {
                Enum_Tag otherTag = tag[receiverCol.hitEntity].Value;
                Enum_Tag damagableFromTag = damageTag[entities[index]].DamagableFromTag;
                bool match = false;

                if (damagableFromTag == otherTag)
                {
                    match = true;
                }
              
                //--------------------------------------------------------------------------------------------------
                //Look Here
                //--------------------------------------------------------------------------------------------------
                if (match)
                {
//NOT CRASH when add
                    healthPoint[entities[index]] = new HealthPoint(healthPoint[entities[index]].Value + 1);
//CRASH when subsract
                    healthPoint[entities[index]] = new HealthPoint(healthPoint[entities[index]].Value - 1);
                   
                    receiverCol.hitEntity = Entity.Null;
                }
                //--------------------------------------------------------------------------------------------------

            }

        }
    }

I found the problem.
This is dependency problem or job order.
My flow is like this

Do Collision Check (Collision System)
Do Damage Check (Damage System)
Do Destroy Check (Destroy System)

I don’t know how Execution order work in internal System, but while DamageSystem doing it’s job DestroySystem delete the entity. And Damage System still access to deleted entity. That’s why crashed.

So, i’ve done like this

 protected override JobHandle OnUpdate(JobHandle inputDeps)
    {
        var DamageWorkJob = new DamageWork
        {
           damageTag = GetComponentDataFromEntity<DamageTag>(),
            otherDamage = GetComponentDataFromEntity<Damage>(),
            tag = GetComponentDataFromEntity<Tag>()
        };
        var DamageWorkJobbHandle = DamageWorkJob.Schedule(this, inputDeps);
       
        var job = new Destroy
        {
            CommandBuffer = m_ECB.CreateCommandBuffer(),

        }.ScheduleSingle(this, DamageWorkJobbHandle);
        job.Complete();
        return job;

    }

But stil crashed. So add “DamageWorkJobbHandle.Complete();”. Now it works well.

 protected override JobHandle OnUpdate(JobHandle inputDeps)
    {
        var DamageWorkJob = new DamageWork
        {
           damageTag = GetComponentDataFromEntity<DamageTag>(),
            otherDamage = GetComponentDataFromEntity<Damage>(),
            tag = GetComponentDataFromEntity<Tag>()
        };
        var DamageWorkJobbHandle = DamageWorkJob.Schedule(this, inputDeps);
       DamageWorkJobbHandle.Complete();
        var job = new Destroy
        {
            CommandBuffer = m_ECB.CreateCommandBuffer(),

        }.ScheduleSingle(this, DamageWorkJobbHandle);
        job.Complete();
        return job;

    }