Estoy tratando de hacer la transición desde el patrón asincrónico basado en eventos donde rastreé los métodos en ejecución usando identificadores únicos y el administrador de consultas.
Como esto se ha eliminado de las aplicaciones de Windows 8, intento obtener un efecto similar con Async/Await pero no puedo entender cómo.
Lo que estoy tratando de lograr es algo así comoCómo rastrear si se está ejecutando una tarea async/awaitable
private async Task updateSomething()
{
if(***the method is already running***)
{
runagain = true;
}
else
{
await someMethod();
if (runagain)
{
run the method again
}
}
}
La parte Estoy luchando con es saber si el método se está ejecutando. Intenté crear una Tarea y ver el estado de ese y el estado. Del método asíncrono, pero no parecen ser el lugar correcto para buscar. Gracias
ACTUALIZACIÓN: Este es el código actual que uso en .net 4 para lograr el mismo resultado. _updateMetaDataAsync es una clase basada en el patrón asincrónico 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();
}
}
No uso Async/Await por elección, más porque MS ha ensuciado el .net para Windows API con Métodos marcados con Async. ¿Hay alguna forma de evitar bajar por la ruta async/await? – Oli
El hecho de que un método termine en Async no significa que tenga que usar 'await'. Simplemente puede usar la 'Tarea' resultante y hacer lo que quiera hacer con ella, como ContinueWith. p.ej. 'webClient.DownloadStringAsync (myUri) .ContinueWith (t => Trace.WriteLine (" done "));' --no 'await'. –