Polecenie Relay może wykonać i zadanie

Chcę rozpocząć zadanie po wywołaniu polecenia przekazującego, ale chcę wyłączyć ten przycisk, dopóki to zadanie jest uruchomione

weź ten przykład

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;
            }
        }

jaki jest najlepszy sposób sprawdzenia, czy to zadanie jest uruchomione?

oto moje rozwiązanie, ale nie jestem pewien, czy jest to najlepszy sposób

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);
        }

    }

Aktualizacja: Każda odpowiedź tutaj działa poprawnie, ale mimo to nie zgadzają się ze sobą, a ja osiągnąłem 100 reputacji, rozpoczynam nagrodę za każdym razem, gdy osiągnę 100, więc szukam implementacji optymalnego niesynchronicznego wycieku asynchronicznego RelayCommand, który wykonuje się w ramach zadania w .net 4.0

questionAnswers(5)

yourAnswerToTheQuestion