在C#windows Phone 8.1中创建异步等待队列
我有一个图像列表视图。根据用户的关键字,列表将被过滤并添加为列表视图的源。添加源代码后,我将使用Async/Await方法从internet下载listview中的图像 这就是我的问题:一旦用户输入关键字,就会创建一个列表并创建异步调用。输入new关键字时,将替换另一个列表,并与上一个列表并行添加新的异步调用。当异步调用的数量增加更多时,UI会有相当大的滞后在C#windows Phone 8.1中创建异步等待队列,c#,windows-phone-8.1,queue,async-await,C#,Windows Phone 8.1,Queue,Async Await,我有一个图像列表视图。根据用户的关键字,列表将被过滤并添加为列表视图的源。添加源代码后,我将使用Async/Await方法从internet下载listview中的图像 这就是我的问题:一旦用户输入关键字,就会创建一个列表并创建异步调用。输入new关键字时,将替换另一个列表,并与上一个列表并行添加新的异步调用。当异步调用的数量增加更多时,UI会有相当大的滞后 这就是我想要的。我需要创建一个大小为5的异步调用队列。当第六次呼叫被添加时。它应该取消第一个异步调用并添加到队列中 您不需要排队;由于每个
这就是我想要的。我需要创建一个大小为5的异步调用队列。当第六次呼叫被添加时。它应该取消第一个异步调用并添加到队列中 您不需要排队;由于每个关键字都会替换上一个关键字,因此一次只需下载一个 这可以通过使用
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;
}
你需要排队吗?也许你只需要取消新列表中不再需要的所有下载任务。如果上述方案不可行,这是我的第二个选择。你能告诉我如何在添加新列表时取消以前的所有呼叫吗?使用
CancellationToken
-Stephen Cleary。不幸的是,前一个电话没有取消。我只使用了您的方法。@AasiqDx:您必须在下载列表async
中观察标记。通常,这是通过将令牌传递给执行网络调用的任何对象来完成的。