yeild return waitforseconds not working?

Hello Everyone,
I know its a easy question but i am doing everything correct but is is not working please once see my code.

void Update () {

Ray ray = cam.ScreenPointToRay(Input.mousePosition);

	      RaycastHit hit;
		if(cldr.Raycast(ray,out hit,15))
	    {
		   StartCoroutine(effect());
	          Destroy(cldr.gameObject);  
	  }
}
 IEnumerator effect()
{
	 
	    Debug.Log("Before...");
	    yield return new WaitForSeconds(0.2f);
		Debug.Log("After....");
	
}

Here before is coming but after is not coming please anyone can solve this problem.

u should try like this:

 void Update () {

       Ray ray = cam.ScreenPointToRay(Input.mousePosition); 
       RaycastHit hit;
       if(cldr.Raycast(ray,out hit,15))
        {
          StartCoroutine(effect());
      }
}

IEnumerator effect()
{
 
       Debug.Log("Before...");
       yield return new WaitForSeconds(0.2f);
       Debug.Log("After....");
       Destroy(cldr.gameObject);  
}