Как отследить, выполняется ли асинхронная / ожидаемая задача

Я пытаюсь перейти от асинхронного шаблона, основанного на событиях, где я отслеживал запущенные методы, используя уникальные идентификаторы и asynoperationmanager.
Поскольку это было удалено из приложений для Windows 8, я пытаюсь получить аналогичный эффект с Async / Await, но не могу понять, как.
То, чего я пытаюсь достичь, это что-то вроде

private async Task updateSomething()
{
    if(***the method is already running***)
    {
        runagain = true;
    }
    else
    {
        await someMethod();
        if (runagain)
        {
            run the method again
        }            
    }
}

Часть, с которой я борюсь, это выяснение, работает ли метод. Я пытался создать задачу и посмотреть на состояние как этого, так и состояния асинхронного метода, но они не являются подходящим местом для поиска. Спасибо

ОБНОВЛЕНИЕ: это текущий код, который я использую в .net 4 для достижения того же результата. _updateMetaDataAsync - это класс, основанный на асинхронном шаблоне на основе событий.

private void updateMetaData()
    {
        if (_updateMetaDataAsync.IsTaskRunning(_updateMetaDataGuid_CheckAllFiles))
        {
            _updateMetaDataGuid_CheckAllFiles_Again = true;
        }
        else
        {
            _updateMetaDataGuid_CheckAllFiles_Again = false;
            _updateMetaDataAsync.UpdateMetaDataAsync(_updateMetaDataGuid_CheckAllFiles);
        }
    }

private void updateMetaDataCompleted(object sender, UpdateMetaDataCompletedEventArgs e)
    {
        if (_updateMetaDataGuid_CheckAllFiles_Again)
        {
            updateMetaData();
        }
    }

Ответы на вопрос(3)

Ваш ответ на вопрос