Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#windows Phone 8.1中创建异步等待队列_C#_Windows Phone 8.1_Queue_Async Await - Fatal编程技术网

在C#windows Phone 8.1中创建异步等待队列

在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的异步调用队列。当第六次呼叫被添加时。它应该取消第一个异步调用并添加到队列中 您不需要排队;由于每个

我有一个图像列表视图。根据用户的关键字,列表将被过滤并添加为列表视图的源。添加源代码后,我将使用Async/Await方法从internet下载listview中的图像

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


这就是我想要的。我需要创建一个大小为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
中观察标记。通常,这是通过将令牌传递给执行网络调用的任何对象来完成的。