El comando de retransmisión puede ejecutarse y una tarea

Quiero iniciar una tarea cuando se llama un comando de retransmisión. Sin embargo, quiero deshabilitar el botón mientras esa tarea se esté ejecutando.

toma este ejemplo

private ICommand update;
public ICommand Update
        {
            get
            {
                if (update == null)
                {
                    update = new RelayCommand(
                        param => Task.Factory.StartNew(()=> StartUpdate()),
                        param => true); //true means the button will always be enabled
                }
                return update;
            }
        }

¿Cuál es la mejor manera de verificar si esa tarea se está ejecutando?

Aquí está mi solución, pero no estoy seguro de si es la mejor manera.

class Vm : ObservableObject 
    {

        Task T;
        public Vm()
        {
            T = new Task(() => doStuff());
        }

        private ICommand myCommand;
        public ICommand MyCommand
        {
            get { return myCommand ?? (myCommand = new RelayCommand( p => { T = new Task(() => doStuff()); T.Start(); }, p => T.Status != TaskStatus.Running)); }
        }


        private void doStuff()
        {
            System.Threading.Thread.Sleep(5000);
        }

    }

Actualización: todas las respuestas aquí funcionan bien, pero aún así no están de acuerdo entre sí, y acabo de alcanzar una reputación de 100, comienzo una recompensa cada vez que llego a 100, así que lo que busco es una implementación para un óptimo sin fugas de memoria asincrónica RelayCommand que se ejecuta dentro de una tarea en .net 4.0

Respuestas a la pregunta(5)

Su respuesta a la pregunta