El único propósito de la propiedad "IsAlive" es para situaciones donde desea realizar alguna acción si el objetivo de una WeakReference ya ha sido destruido, pero donde no desea arriesgarse accidentalmente a mantenerlo con vida más tiempo del necesario . Si tuviera que decir, p.
if (someWeakReference.Target == null)
cleanup_related_object();
y el recolector de basura fueron (por cualquier razón) gatillo derecho después del código que evalúa someWeakReference.Target, el GC se daría cuenta de que existía una fuerte referencia a ese objeto y se opone a su colección. Por otro lado, diciendo:
if (!someWeakReference.IsAlive)
cleanup_related_object();
no habría riesgo de prolongar la vida útil de forma accidental el objetivo de orientar someWeakReference