I found the solutions to solve this issue and I show my idea to discuss:
When calling task.end(transition) the task will fire EVENTTYPE_END_EVENT, Fork receive the event and do its task. At that time, the task check the signal flag (isSignalling) to make sure that 'the end of this task triggers continuation of execution' and this condition is passed, so the token of this task to send the signal by calling token.signal(transition) and Fork node will receive this signal again.
So, I think, we will off the signal flag by calling the function task.setSignalling(false) when calling task.end(transition) in the internal of this task.
Note: This situation only appear when you force end task in internal of this task.
dungnguyen, thank You SO MUCH.
Same trouble - Your workaround works.