1.Whyは、上記のコードの動作しますか?
それはBackground task resource constraintsに言われたよう:
バックグラウンドタスクは、壁時計の使用量の30秒に制限されています。
この制約はTimeTriggerにも適用されます。しかし、あなたのコードは動作しますが、これはVisual Studioであなたのバックグラウンドタスクをデバッグしているからです。 Visual Studioデバッガが接続されると、Visual Studioはバックグラウンドタスクを制御します。バックグラウンドタスクは、開発者がデバッグを手助けするためのものです。デバッガを使用しないと、CPUクォータを超えるバックグラウンドタスクはOSによってキャンセルされます。例えば
、我々は次のようなバックグラウンドタスクを使用する場合:
public sealed class MyBackgroundTask : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
var deferral = taskInstance.GetDeferral();
var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("Test.txt", CreationCollisionOption.OpenIfExists);
await FileIO.AppendTextAsync(file, $"{DateTime.Now.ToString()} first activity{Environment.NewLine}");
await Task.Delay(TimeSpan.FromSeconds(90.0));
await FileIO.AppendTextAsync(file, $"{DateTime.Now.ToString()} second activity{Environment.NewLine}");
deferral.Complete();
}
}
をしてから、このアプリのパッケージをサイドローディングしてテスト。 (UWPアプリのサイドロード方法については、Packaging UWP appsを参照してください)。バックグラウンドタスクがトリガーされると、我々は(このファイルは通常%USERPROFILE%\AppData\Local\Packages\{Package family name}\LocalState
の下にある)Test.txtをファイルで見つけることができ、出力は次のようなものです:
9/2/2016 3:06:35 PM first activity
9/2/2016 3:20:15 PM first activity
があるだけで、「最初のアクティビティ」ノー "第二の活動 "と呼ばれる。そしてイベントビューに、我々は次のような情報を得ることができます。
これらの情報は、運用→マイクロソフト→Windowsの→BackgroundTaskInfrastructure→アプリケーションとサービスログの下にあります。
2. CPUクォータは、TriggerTypeごとに文書化されていますか?
トリガータイプごとのCPU割り当てに関するドキュメントはありません。参考Background task guidance:
CPUクォータ:バックグラウンドタスクは、それらがトリガータイプに基づいて取得壁時計の使用時間の量によって制限されています。ほとんどのトリガは30秒のウォールクロック使用に制限されていますが、集中トリガを完了するためには最大10分間まで実行できる機能もあります。 ApplicationTrigger
、MaintenanceTrigger
とDeviceUseTrigger
などの
ごく少数のトリガーは、30秒より長い使用法を持っています。バックグラウンドタスクは、バッテリ寿命を節約し、フォアグラウンドアプリケーションのユーザーエクスペリエンスを向上させるため、軽量でなければなりません。軽量コードをバックグラウンドで実行し、30秒以内に終了させることをお勧めします。
素晴らしい回答です。 – Martin777
あなたは「トリガタイプごとのCPUクォータについてのドキュメントはありません」と言いますが、「ApplicationTrigger」などの使用時間が長いこともわかります。それはなぜ文書化されていないのですか?それはdocuenetedされていないので、あなたはどのように知っていますか? – GradientByte