Так как ты написал делать нельзя, будет накапливаться ошибка которая будет приводить к тому, что все касты реально будут дольше 10с (и чем ниже фпс, тем больше разница)
Надо как-то так:
Код
void Update() {
  if (Input.GetKeyDown(KeyCode.E)) {
    StartCoroutine(Cast(10f));
  }
}
IEnumerator Cast(float time) {
  var startTime = Time.time;
  var endTime = startTime + time;
  while (Time.time < endTime) {
    if (!Input.GetKey(KeyCode.E)) {
      Debug.Log("Игрок отпустил кнопку раньше времени");
      yield break;
    }
    Debug.Log(string.Format("Progress: {0}", (Time.time - startTime) / time));
    yield return null;
  }
  Debug.Log("Игрок продержал кнопку нужное время");
}