【问题标题】:BackgroundDownloader and "Only up to 50 groups can be configured"BackgroundDownloader 和“最多只能配置 50 个组”
【发布时间】:2016-04-10 08:38:30
【问题描述】:

我有一个 WinRT 应用程序(Windows 8.1 和 Windows Phone 8.1)。我使用BackgroundDownloader 分组下载文件。

我使用群组下载有声读物,因此有声读物的所有曲目都在一个群组中下载,并且可以一次取消。每个组的下载都是串行下载(不是并行),因此用户可以从一开始就开始收听有声读物。

我使用这样的代码来创建下载:

var downloader = new BackgroundDownloader
{
    TransferGroup = BackgroundTransferGroup.CreateGroup(groupKey),
};

var download = downloader.CreateDownload(source, destinationFile);

download.TransferGroup.TransferBehavior = BackgroundTransferBehavior.Serialized;

问题是当用户发起超过 50 次下载时,

download.TransferGroup.TransferBehavior = BackgroundTransferBehavior.Serialized;

代码行引发Only up to 50 groups can be configured 异常。

例外情况,可能是BackgroundDownloader 限制(当然,MSDN 上没有关于此的信息)如果限制运行 50 个下载组就可以了。

问题是,下载完成时也会发生异常。

举例:用户发起49次下载,全部成功完成。然后用户再发起 1 次下载,一切正常。然后用户再启动 1 次下载并抛出此异常。虽然没有 50 个下载组已经在运行。自应用推出以来,仅创建了 50 个下载组。

有没有办法在完成后“删除”组?手动下载组后,我是否必须处理这些组?是否是 WinRT 错误(我不会感到惊讶)?

【问题讨论】:

    标签: c# windows-runtime windows-phone-8.1 microsoft-metro


    【解决方案1】:

    目前我不知道如何删除已完成的 BackgroundTransferGroup。 另外,正如 MSDN (https://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.backgroundtransfer.backgroundtransfergroup.aspx) 上所说:

    Windows 8.1 和 Windows Server 2012 R2 支持整个系统最多 50 个唯一传输组。因此,应用程序应该为应用程序创建的所有传输组重复使用唯一 ID 或少量唯一 ID。如果系统上创建的传输组超过 50 个,应用将进入不可恢复状态。

    虽然 MS 不限制一个应用程序的组数(超出系统限制),但这意味着人们必须注意他们创建了多少组,并找到一种可接受的机制来重用它们。

    鉴于这些限制,您可能会发现自己限制了同时发生的最大并发下载(即组)数量,或者将下载分组到一个大型应用组,或者根本不分组。

    【讨论】:

    • 这太糟糕了.. 一个大组/没有组对我来说是不可接受的,因为描述的有声读物用例.. 重用组真的是在自找麻烦
    • 重用组(跟踪您的组名)是目前唯一可用的解决方案。
    猜你喜欢
    • 2021-10-14
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多