Windows runtime 控制后台任务实例

Windows runtime 控制后台任务实例,windows-runtime,windows-phone-8.1,windows-store-apps,synchronization,windows-8.1-universal,Windows Runtime,Windows Phone 8.1,Windows Store Apps,Synchronization,Windows 8.1 Universal,有没有办法同步一个后台任务的多个实例 我正在从事一个通用Windows8.1商店项目。我有一个后台任务,接收原始通知、下载和更新一些数据(希望满足CPU配额和运行时间限制) 我希望避免在Windows Phone上同时运行后台工作,因为同时会有多个推送。也就是说,后台任务应该检查它的另一个实例是否正在运行,然后安静地退出 我能想到的唯一方法是通过本地存储中的信号量文件。。。但由于WP上的所有文件IO都是异步的,我不知道如何在没有竞争条件的情况下让它工作 有什么想法吗?有跨进程同步的对象,使用它们

有没有办法同步一个后台任务的多个实例

我正在从事一个通用Windows8.1商店项目。我有一个后台任务,接收原始通知、下载和更新一些数据(希望满足CPU配额和运行时间限制)

我希望避免在Windows Phone上同时运行后台工作,因为同时会有多个推送。也就是说,后台任务应该检查它的另一个实例是否正在运行,然后安静地退出

我能想到的唯一方法是通过本地存储中的信号量文件。。。但由于WP上的所有文件IO都是异步的,我不知道如何在没有竞争条件的情况下让它工作


有什么想法吗?

有跨进程同步的对象,使用它们比用文件发送信号要好得多。您可能会考虑使用或与全局同步的名称一起使用。它可以在多个进程(不仅仅是线程)之间工作。这是一个很好的同步示例

在您的情况下,如果设置了句柄,则表示执行工作的其他进程和当前进程可以返回


关于waithandles,您可以在上找到更多信息。

您是只询问WP8.1还是W10您标记了W10的代表。他们过去称它为Windows 8.1的通用商店应用程序。好的,我会取下标签。谢谢!不知道EventWaithHandle在进程之间工作。但有一个问题:如果操作系统在有机会发出信号之前杀死锁定EventWaithHandle的进程,会发生什么情况呢?因此,要使用这种技术,我要做以下操作:
boolCreateNew;变量句柄=新的EventWaitHandle(false,EventResetMode.ManualReset,“bglock”,out createNew);如果createNew标志是向上的,那么我刚刚锁定了“bglock”系统事件,否则其他进程正在保持它,我应该退出。我做对了吗?这种方法是否依赖于我在工作完成时处理EventWaitHandle?这可能根本不会发生,因为操作系统可能随时杀死我的进程,甚至不会向我或其他人触发事件。对于文件,我至少可以检查创建信号量文件的时间,以检测过时的锁。@NoxNoctis请注意,当操作系统取消您的BTask时,它将获得取消事件并完成一个事件-您应该处理这种情况。至于您可以在这里查看的模式,在您的情况下,它可能会被简化,但应该是一个良好的开端。基本上正如我所想,创建一个全局对象,然后运行boolhashandle=obj.WaitHandle(0),如果有句柄,则执行一些工作,并在完成后释放互斥。可能存在一些陷阱-请记住,同步对象必须由获取的同一线程返回。引用中说“如果没有出现内存不足异常,或者应用程序没有处理它,那么后台任务将在没有警告的情况下终止,并且不会引发OnCanceled事件。”