Cómo rastrear si se está ejecutando una tarea asíncrona / pendiente

Estoy tratando de hacer la transición desde el Patrón asíncrono basado en eventos, donde realicé el seguimiento de los métodos de ejecución utilizando ID únicos y el Administrador de asynoperación.
Como ahora esto se eliminó de las aplicaciones de Windows 8, estoy tratando de obtener un efecto similar con Async / Await, pero no sé cómo.
Lo que estoy tratando de lograr es algo como

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

La parte con la que estoy luchando es averiguar si el método se está ejecutando. He intentado crear una tarea y ver el estado de eso y el .status del método asíncrono, pero no parecen ser el lugar correcto para buscar. Gracias

ACTUALIZACIÓN: Este es el código actual que utilizo en .net 4 para lograr el mismo resultado. _updateMetaDataAsync es una clase basada en el patrón asíncrono basado en eventos.

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta