A execução estendida não está funcionando corretamente?
Não consigoExtendedExecution
para funcionar corretamente. O problema é que oRevoked
O evento não está sendo disparado até que a execução seja concluída. Se tomarmos uma amostra:
private async void OnSuspending(object sender, SuspendingEventArgs e)
{
Debug.WriteLine("Suspending in app");
var deferral = e.SuspendingOperation.GetDeferral();
using (var session = new ExtendedExecutionSession())
{
session.Reason = ExtendedExecutionReason.SavingData;
session.Description = "Upload Data";
session.Revoked += (s, a) => { Debug.WriteLine($"Extended execution revoked because of {a.Reason}"); };
var result = await session.RequestExtensionAsync();
if (result == ExtendedExecutionResult.Denied) Debug.WriteLine("Extended execution failed");
else
{
Debug.WriteLine("Executing");
await Task.Run(() => { Task.Delay(9000).Wait(); Debug.WriteLine("Finished the task"); });
Debug.WriteLine("Executing finished");
}
Debug.WriteLine("Suspending after execution");
}
deferral.Complete();
}
A documentação afirma queRevoked
O evento deve ser acionado ao reiniciar o aplicativo, mas se você tentar o código com o depurador conectado, verá que a saída de depuração parece boa, mas é necessário aguardar 9000 ms para que ela apareça. Isso significa que o código é suspenso até a sessão terminar.
O maior problema é que, se você disparar isso sem o depurador conectado, iniciar o aplicativo, suspender e continuar, você verá uma tela preta por alguns segundos e o SO encerrará o aplicativo.
Estou esquecendo de algo? Alguém conseguiu funcionar corretamente?