Let's say that you want to run some asynchronous task after a timer of some sort, then the StartCoroutine method is your friend, with a very set it and forget it approach.
// Start is called before the first frame update
void Start()
{
StartCoroutine("doSomethingAfter3seconds");
StartCoroutine("doSomethingAfter5seconds", "Say hi");
}
IEnumerator doSomethingAfter3seconds(){
yield return new WaitForSeconds(3);
Debug.Log("it's been 3 seconds");
}
IEnumerator doSomethingAfter5seconds(object value){
yield return new WaitForSeconds(5);
Debug.Log($"it's been 5 seconds, {value}");
}
And that's all there is to it, there's also controller function. that will let you stop your coroutine or stop all coroutines.
StopCoroutine("doSomethingAfter3seconds");
StopAllCoroutines();