背景任务延期.完成
本文关键字:完成 任务 背景 | 更新日期: 2023-09-27 18:21:04
我的问题是,deferral.complete()
方法到底是什么,这个方法调用事件task.Compledet
吗,或者有没有办法从我的类BackgroundSyncer
中的BackgroundTaskSyncer
调用方法????当我运行Programm时,我会从BackgroundTaskSyncer中执行run方法,但在其他类中什么都不做??
namespace NotificationTask
{
public sealed class BackgroundTaskSyncer : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
deferral.Complete();
}
}
}
namespace Services
{
public static class BackgroundSync
{
private static async Task RegisterBackgroundTask()
{
try
{
BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();
if (status == BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity || status == BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity)
{
bool isRegistered = BackgroundTaskRegistration.AllTasks.Any(x => x.Value.Name == "Notification task");
if (!isRegistered)
{
BackgroundTaskBuilder builder = new BackgroundTaskBuilder
{
Name = "Notification task",
TaskEntryPoint =
"NotificationTask.BackgroundTaskSyncer"
};
builder.SetTrigger(new TimeTrigger(15, false));
builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
BackgroundTaskRegistration task = builder.Register();
task.Completed += new BackgroundTaskCompletedEventHandler(OnCompleted);
task.Progress += new BackgroundTaskProgressEventHandler(OnProgress);
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("The access has already been granted");
}
}
private static void OnCompleted(IBackgroundTaskRegistration task, BackgroundTaskCompletedEventArgs args)
{
ToTheBackGroundWork();
}
async void
事件和方法的问题。例如,如果在后台操作期间必须使用await
,则可以使用async void Run
方法。但问题是运行时不知道你实际上还有更多的工作要做
因此,延迟是一个可以用来通知运行时"我现在真的完成了"的对象。只有当你需要await
时,延迟才是必要的。
我有一篇博客文章,更详细地介绍了"异步事件处理程序"和延迟。