Я не могу получить ExtendedExecution
для правильной работы. Проблема в том, что событие Revoked
не запускается до завершения выполнения. Если взять образец:
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();
}
В документации указано, что при возобновлении приложения должно быть запущено событие Revoked
, но если вы попробуете код с прикрепленным отладчиком, то вы увидите, что вывод отладки выглядит нормально, но для этого вам нужно подождать 9000 мс показывать. Это означает, что код приостанавливается до окончания сеанса.
Самая большая проблема заключается в том, что если вы запускаете это без отладчика, запустите приложение, приостановите его, а затем возобновите, вы увидите черный экран в течение нескольких секунд, а затем ОС прекратит ваше приложение.
Я что-то упустил? Кто-нибудь заработал правильно?