【问题标题】:Create Async Await Queue in C# windows Phone 8.1在 C# windows Phone 8.1 中创建异步等待队列
【发布时间】:2015-06-21 09:00:38
【问题描述】:

我有一个图像列表视图。根据用户的关键字,过滤列表并添加精炼列表作为列表视图的来源。添加源后,我使用 Async/Await 方法从 Internet 下载列表视图中的图像。

这是我的问题:一旦用户输入关键字,就会创建一个列表并创建异步调用。当输入新关键字时,另一个列表被替换,新的异步调用与前一个并行添加。当异步调用数量增加时,UI 会出现相当大的滞后。

这就是我想要的。当添加第六个调用时,我需要创建一个大小为 5 的异步调用队列。它应该取消第一个异步调用并添加到队列中。

【问题讨论】:

  • 你还需要排队吗?也许您只需要取消新列表不再需要的所有下载任务。
  • 如果上述情况不可行,那是我的第二个选择。添加新列表时,您能解释一下如何取消之前的所有通话吗??
  • 使用CancellationToken

标签: c# windows-phone-8.1 queue async-await


【解决方案1】:

您不需要排队;由于每个关键字都会替换前一个关键字,因此您一次只需要下载一个。

这可以使用CancellationTokenSource 来完成。这是一个示例方法:

private CancellationTokenSource _cts;
private async Task RefreshListAsync(string keyword)
{
  if (_cts != null)
    _cts.Cancel();
  _cts = new CancellationTokenSource();
  var result = await DownloadListAsync(keyword, _cts.Token);
  _cts.ThrowIfCancellationRequested();
  MyList = result;
}

【讨论】:

  • -斯蒂芬·克利里。不幸的是,之前的通话没有取消。我只使用了你的方法。
  • @AasiqDx:你必须观察DownloadListAsync中的令牌。通常,这是通过将令牌传递给正在进行网络调用的任何对象来完成的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 2012-10-21
  • 2014-01-21
  • 2019-03-04
  • 2013-04-12
相关资源
最近更新 更多