我有一个需要在后台运行长任务的应用。与此同时,用户应该使用其他应用程序开展业务。对于Windows应用商店应用 - 这可能意味着该应用将被暂停/终止。
我想通过Task.Run
在一个单独的线程中运行它来处理实际的长时间运行任务。但这引发了将结果返回UI的问题。
那么 - Windows应用商店应用是否不适合任何此类应用?或者是否存在解决此暂停/终止问题的方法?
答案 0 :(得分:0)
任务如何恢复应用程序?
任务继续从暂停的位置开始运行。
如果应用程序被终止 - 这显然是一个问题 - 我必须这样做 防止这种情况。
您无法阻止应用终止,您只需要对其进行调整,否则,确实存在问题。
您的任务需要了解应用程序生命周期。您不应该只通过Task.Run运行代码,而应将代码包装到类中以处理挂起和终止事件。这意味着您的任务应该是可以使用的,并且还需要能够保持其状态以便处理应用程序终止。
也许这个伪代码会给你一个想法:
class LongRunningTask {
private void LongRunningJob() {
// Do some long running job
// Implement cancellation/pause token
}
public async Task StartAsync(IState state) {
// Load previous state
// Start LongRunningJob()
}
public async Task<IState> SuspendAsync() {
// Stop LongRunningJob() using a token
// Return current state, in case of termination
}
public async Task ResumeAsync() {
// Resume LongRunningJob using a token
}
}
并在App中:
private async override void OnLaunched(LaunchActivatedEventArgs e) {
// Check launch reason first
// Read state from the disk
await longRunningTask.StartAsyc(state);
}
private async void OnResuming(object sender, object e) {
await longRunningTask.ResumeAsync();
}
private async void OnSuspending(object sender, SuspendingEventArgs e) {
await longRunningTask.SuspendAsync();
}
我知道它根本看起来并不干净,但考虑到应用程序无法禁止它的生命周期,我认为没有干净的方法。
编辑:根据您的代码执行的操作,您可能不需要关心暂停,因为代码会在恢复后继续自动运行,但您显然需要处理应用程序终止。