BackgroundDownloader 和 "Only up to 50 groups can be configured"

BackgroundDownloader and "Only up to 50 groups can be configured"

我有一个 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个下载组。

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

目前我不知道有什么方法可以删除完成的 BackgroundTransferGroup。 另外,正如它在 MSDN (https://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.backgroundtransfer.backgroundtransfergroup.aspx) 上所说:

Windows 8.1 and Windows Server 2012 R2 support a maximum of 50 unique transfer groups for the entire system. So an app should reuse a unique ID or a small number of unique IDs for all transfer groups created by the app. If more than 50 transfer groups are created on the system, the app will get in an unrecoverable state.

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

考虑到这些限制,您可能会发现自己限制了同时发生的并发下载(即组)的最大数量,或者将下载分组到一个大的应用程序组,或者根本不对它们进行分组。