【问题标题】:How to make sure only one backgroundtask is running at once?如何确保一次只运行一个后台任务?
【发布时间】:2018-12-07 09:42:33
【问题描述】:

我已尝试此代码以确保任务只能运行一次:

    static bool running = false;

public void Run(IBackgroundTaskInstance taskInstance)
{
    if (running)
    {
        makeToast("Cancelled because another already running");
        return;
    }

    running = true;
    // Do stuff.
}

但是,即使任务的所有实例都已终止,似乎运行仍然是正确的。在取消时将其设置为 false 也不可靠,因为取消方法并不总是被调用(意外的系统关闭、崩溃......)。

有没有办法判断其他实例是否在后台任务本身中运行?

【问题讨论】:

  • 首先,在可写静态上加一个锁。也许也可以尝试抓住你的工作,如果工作失败,则将 running fo 设置为 false。
  • @LeBigCat 锁只能帮助写作,对吧?
  • 有点复杂:阅读此链接stackoverflow.com/questions/1668719/…

标签: c# uwp background desktop-bridge


【解决方案1】:

我觉得你可以用LocalSettings来记录后台任务的运行时间。并且本地设置数据将存储在磁盘中并且是持久化的。

var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
localSettings.Values["exampleSetting"] = "Hello Windows";

在下一次后台任务运行之前,您可以检索数据,如果它不为空,则任务已经运行。

Object value = localSettings.Values["exampleSetting"];

if (value == null)
{
    // No data.
}
else
{
    // Access data in value.
}

// Delete a simple setting.
localSettings.Values.Remove("exampleSetting");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2012-01-08
    相关资源
    最近更新 更多