我有一个图像列表视图。根据用户的关键词,列表被过滤并且精炼列表被添加为列表视图的源。一旦添加了源代码,我就会使用Async / Await方法从internet中下载listview中的图像。
这是我的问题:用户输入关键字后,会创建一个列表并创建异步调用。输入新关键字时,将替换另一个列表,并添加与前一个相同的新异步调用。当异步调用的数量增加时,UI存在相当大的滞后。
这就是我想要的。当添加第六个调用时,我需要创建一个大小为5的异步调用队列。它应该取消第一个异步调用并添加到队列中。
答案 0 :(得分:0)
你不需要排队;由于每个关键字都替换了前一个关键字,因此您一次只需要进行一次下载。
这可以使用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;
}