我想知道远程设备调用后台任务的限制是什么。我在微软的文档中找到的只是后台任务的一般限制,这是30秒。
但我的简单测试表明,从其他设备调用的 应用服务 并非如此。 (我不确定常规应用程序服务。我没有在测试中包含它们)
这是我的测试方法:
我将此代码放入应用的OnBackgroundActivated
并注册了TimeTrigger
后台任务。
for (int i = 0; i < 100; i++)
{
Common.ToastFunctions.SendToast((i * 5).ToString() + " seconds");
await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(5));
}
(我推迟了,所以由于await
操作,任务不会意外关闭
我得到了20-25秒的吐司通知,之后什么都没有。因此,该过程在30秒之前被杀死,这与官方文档一致。
然后我将完全相同的代码放在RequestReceived
的{{1}}事件中,并将此代码放在AppServiceConnection
中(基本上设置了OnBackgroundActivated
事件并获取延迟:
RequestReceived
然后我创建了一个连接,并从另一个设备(使用Rome API)向该后台任务发送了一些数据
这一次,它在30秒之前没有停止。我的循环是 this._backgroundTaskDeferral = args.TaskInstance.GetDeferral();
args.TaskInstance.Canceled += OnTaskCanceled;
var details = args.TaskInstance.TriggerDetails as AppServiceTriggerDetails;
if (details?.Name == "com.ganjine") //Remote Activation
{
_appServiceconnection = details.AppServiceConnection;
_appServiceconnection.RequestReceived += OnRequestReceived;
_appServiceconnection.ServiceClosed += AppServiceconnection_ServiceClosed;
}
次迭代,我得到了祝酒,表明后台任务没有停止,并且能够运行 ~500秒。
但这是我的循环,它可能会让继续更长的循环。
这是预期的行为吗?从远程设备调用的AppService后台任务的确切限制是什么?
更新:似乎远程应用程序(调用此后台任务的人)必须保持打开状态。 (可能是因为连接对象应该保持活着?)。如果我关闭它,后台应用程序服务将在几秒后终止。
答案 0 :(得分:5)
这是预期的行为吗?从远程设备调用的AppService后台任务的确切限制是什么?
是。应用服务的生命周期很长。它不限于30秒。如果暂停调用应用程序,应用程序赞助的应用程序服务将被终止。它也没有内存限制,但如果机器本身的资源不足,可能会导致启动失败或服务终止。
您可以通过channel9上的视频获取更多详细信息:App-to-App Communication: Building a Web of Apps