Relay Command kann eine Task ausführen und ausführen

Ich möchte eine Aufgabe starten, wenn ein Relay-Befehl aufgerufen wird. Ich möchte jedoch die Schaltfläche deaktivieren, solange diese Aufgabe ausgeführt wird

nimm dieses Beispiel

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

Wie kann am besten überprüft werden, ob diese Task ausgeführt wird?

Hier ist meine Lösung, aber nicht sicher, ob es der beste Weg ist

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

    }

Update: Jede Antwort hier funktioniert gut, aber immer noch stimmen sie nicht miteinander überein, und ich habe gerade einen Ruf von 100 erreicht. Ich starte ein Kopfgeld, wenn ich 100 erreiche. Was ich also suche, ist eine Implementierung für ein optimales nicht speicherleckendes asynchrones System RelayCommand, der innerhalb einer Task in .net 4.0 ausgeführt wird

Antworten auf die Frage(5)

Ihre Antwort auf die Frage