我想知道远程设备调用后台任务的限制是什么 . 我在微软的文档中发现的只是后台任务的一般限制,即30秒 .
但我的简单测试显示,从另一台设备调用 app service 并非如此 . (我'm not sure about regular app services though. I didn' t将它们包含在我的测试中)
这是我的测试方法:
我将此代码放到应用程序的 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秒之前被杀死,这与官方文档一致 .
然后我把完全相同的代码放在我的 AppServiceConnection
的 RequestReceived
事件中,并且这个代码在 OnBackgroundActivated
中(基本上设置 RequestReceived
事件并获得延迟:
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;
}
然后我创建了一个连接并从另一个设备向此后台任务发送了一些数据(使用Rome API)
这一次,它在30秒之前没有停止 . 我的循环是 100
次迭代,我得到了祝酒词,表明后台任务没有停止并且能够运行 ~500 seconds .
但这是我的循环,它可能会继续更长的循环 .
这是预期的行为吗?从远程设备调用的AppService后台任务的确切限制是什么?
更新:似乎远程应用程序(调用此后台任务的人)必须保持打开状态 . (可能是因为连接对象应该保持活着?) . 如果我关闭它,后台应用程序服务将在几秒钟后终止 .
1 回答
是 . 应用服务的生命周期很长 . 它不限于30秒 . 如果暂停调用应用程序,应用程序赞助的应用程序服务将被终止 . 它也没有内存限制,但如果机器本身的资源不足,可能会导致启动失败或服务终止 .
您可以从channel9上的视频中获取更多详细信息:App-to-App Communication: Building a Web of Apps
App-to-App Communication