None; the point of functions like Update is that they run every frame. Therefore it would make no sense for them to be a coroutine. You can either call coroutines from Update (be very careful about this: make sure conditions allow this to happen only once, or else you'll be launching a new instance of the coroutine every frame), or just don't use Update. If you're regularly scheduling events at certain times rather than running something every frame, then it would make more sense not to use Update.
If you want to have coroutine behaviour in a update function, you can consider an approach like CoUpdate. It isn't as elegant as having support directly on Update, but it does the job. It may fail if you are enabling/disabling the script but you could probably just start/stop the main coroutine in OnEnable and OnDisable.
CoUpdate comes with example code so take a look there if you're interested.
// CoUpdate example.
#pragma strict
var destroyable : boolean;
function Start()
{
StartCoroutine("CoStart");
}
function CoStart() : IEnumerator
{
while (true)
yield CoUpdate();
}
function CoUpdate() : IEnumerator
{
// Some other code I'm sure.
// Some other code I'm sure.
// Some other code I'm sure.
yield WaitForSeconds(4);
destroyable = true;
// Some other code I'm sure.
// Some other code I'm sure.
// Some other code I'm sure.
}
Make your own function which is called in update if the corountine hasn't started. Then that function can be coroutined, for example:-
function Update()
{
if (CorountineHasStarted == false)
{
CoroutineFunction();
}
//assuming your destroyable variable effects someting in here
if (destoryable == true)
{
// conditions for your destroy eg.
if (Life <= 0)
{
destroy.GameObject;
}
}
}
function CoroutineFunction()
{
CoroutineHasStarted = true;
yield WaitForSeconds(4);
destroyable = true;
}