Sto provando a passare dal modello asincrono basato su eventi in cui ho monitorato i metodi di esecuzione utilizzando ID univoci e il gestore asynoperation.
Dato che questo è stato eliminato dalle App di Windows 8, sto cercando di ottenere un effetto simile con Async/Attesa, ma non riesco a capire come.
Quello che sto cercando di realizzare è qualcosa di simileCome monitorare se è in esecuzione un'attività asincrona/attendibile
private async Task updateSomething()
{
if(***the method is already running***)
{
runagain = true;
}
else
{
await someMethod();
if (runagain)
{
run the method again
}
}
}
La parte che sto lottando con è scoprire se il metodo è in esecuzione. Ho provato a creare un'attività e a controllare lo stato di entrambi e quello .status del metodo asincrono, ma non sembrano essere il posto giusto da guardare. Grazie
AGGIORNAMENTO: questo è il codice corrente che uso in .net 4 per ottenere lo stesso risultato. _updateMetaDataAsync è una classe basata sul modello asincrono basato su eventi.
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();
}
}
Non uso Async/Attendi tramite scelta, più perché MS ha disseminato l'API .net per Windows con Metodi marcati asincroni. Esiste comunque la possibilità di evitare di percorrere la rotta asincrona/attesa? – Oli
Solo perché un metodo termina in Async non significa che devi usare 'await'. Puoi semplicemente usare il risultante 'Task' e fare tutto ciò che vuoi fare con esso, come ContinueWith. per esempio. 'webClient.DownloadStringAsync (myUri) .ContinueWith (t => Trace.WriteLine (" done "));' --no 'await'. –