Using Animator animation, how to do an animation or start code when an animation finishes?

Hi guys, I know this question has been posted many times but I didn’t find the right answer for me. So I have a Monster Gameobject and a character Gameobject and I want that after my character finishes his attack animation my monster start his.

public class BattleScripts : MonoBehaviour 
{
    public Battle battle;
	public CharacterAnimateAction characterAnimate;
	public MonsterAnimateAnimation monsterAnimate;

    void Start()
    {
		battle = new Battle();
		characterAnimate = GameObject.Find("Character").
			GetComponent<CharacterAnimateAction>();
		monsterAnimate = GameObject.Find ("Boss").GetComponent<MonsterAnimateAnimation> ();
    }

    void Update()
    {
    }

	public void PlayerAttack()
	{
		battle.game.Attack ();
		characterAnimate.getCharactersPositions ();
		monsterAnimate.DoBossSkill ();
	}

in my void player attack the two animations load at the same time and I want to start DoBossSkill when getCharactersPositions() finishes. This is my Character script:
public class CharacterAnimateAction : MonoBehaviour {

// Use this for initialization
public Vector3 characterPosition;
public Vector3 monsterPosition;
public MonsterAnimateAnimation monsterAnimate;	
Animator anime;

// Use this for initialization
void Start () {
	anime = GetComponent<Animator> ();
	monsterAnimate = new MonsterAnimateAnimation ();
	characterPosition = transform.position;
}

// Update is called once per frame
void Update () {
	
}

public void getCharactersPositions()
{
	GameObject theCharacter = GameObject.Find ("Character");
	CharacterAnimateAction characterAnimate = theCharacter.GetComponent<CharacterAnimateAction> ();
	characterPosition = characterAnimate.characterPosition;

	GameObject theMonster = GameObject.Find ("Boss");
	monsterAnimate = theMonster.GetComponent<MonsterAnimateAnimation> ();
	monsterPosition = monsterAnimate.monsterPosition;

	transform.position = monsterPosition;
	AttackAnimation ();
}

If you could help me out I would really appreciate it thank you guys!

Add an Event to the last frame of the animation clip, or the frame before that, and make it call a function that does whatever you want.

If you just want an animation in the same controller space to play, you can just add a transition to the next animation state and make the animation have an exit time of 1.

The way I go about this which may not be the prettiest but it works is start a timer when the first animation starts and then when the timer.Elapsed.totalSeconds == the length of the first animation then start the second animation