这个问题扩展了我之前的一个Asynchronuos binding and LINQ query hangs。假设我有一个这样的 LINQ:
var query = from var item in items where item.X == 1 select item;
我可以异步迭代整个过程query
并将每个项目分派到 UI(或者我可以使用IProgress
):
foreach(var item in query)
{
Application.Current.Dispatcher.BeginInvoke(
new Action(() => source.Add(item)));
}
现在我想取消查询......我可以简单地声明一个CancellactionTokenSource
cts,将一个令牌放入一个任务中,然后:
foreach(var item in query)
{
cts.Token.ThrowIfCancellationRequested();
Application.Current.Dispatcher.BeginInvoke(
new Action(() => source.Add(item)));
}
问题是,我只能在出现新结果时取消。因此,如果有一长串项目不符合我的查询条件,我的取消请求将被忽略。
如何将取消加入 LINQ(对象)并能够检查每个项目的取消标记?