在ReactiveUI ViewModel(ReactiveObject)中取消异步任务

冲突

我目前正在使用ReactiveUI(5.5.1)进行实验,并创建了一个ViewModel(的子类ReactiveObject)作为位置搜索自动完成功能(改编自github上的mikebluestein / ReactiveUIDemo)。每次查询文本更改时,都会调用REST服务,该服务返回所提交查询的匹配位置。

问题:正如您在下面的代码中看到的那样,它DoSearchAsync(string query, CancellationToken cancellationToken)是可以取消的,但是,我不确定如何(以及在​​代码中的位置)实际取消任何搜索-因此使用CancellationToken.Noneatm。在此特定用例中取消请求似乎是一个过大的杀手,但我想知道无论如何在这种reactUI / async-Task方案中如何启用取消。

代码:

public class ReactiveLocationSearchViewModel : ReactiveObject {

readonly ReactiveCommand searchCommand = new ReactiveCommand();

public ReactiveCommand SearchCommand { get { return searchCommand; } }

string query;

public string Query
{
    get { return query; }
    set { this.RaiseAndSetIfChanged(ref query, value); }
}

public ReactiveList<Location> ReactiveData { get; protected set; }

public ReactiveLocationSearchViewModel()
{
    ReactiveData = new ReactiveList<Location>();
    var results = searchCommand.RegisterAsyncTask<List<Location>>(async _ => await DoSearchAsync(query, CancellationToken.None));

    this.ObservableForProperty<ReactiveLocationSearchViewModel, string>("Query")
        .Throttle(new TimeSpan(700))
        .Select(x => x.Value).DistinctUntilChanged()
        .Where(x => !String.IsNullOrWhiteSpace(x))
        .Subscribe(searchCommand.Execute);

    results.Subscribe(list =>
    {
        ReactiveData.Clear();
        ReactiveData.AddRange(list);
    });
}

private async Task<List<Location>> DoSearchAsync(string query, CancellationToken cancellationToken)
{
    // create default empty list
    var locations = new List<Location>();

    // only search if query is not empty
    if (!string.IsNullOrEmpty(query))
    {
        ILocationService service = ServiceContainer.Resolve<ILocationService>();
        locations = await service.GetLocationsAsync(query, cancellationToken);
    }

    return locations;
}

}

安娜·贝茨(Ana Betts)

RxUI 5.x没有内置的功能,但是很容易伪造:

var results = searchCommand.RegisterAsync<List<Location>>(
    _ => Observable.StartAsync(ct => DoSearchAsync(query, ct)));

在RxUI v6中,这是内置的:

searchCommand = ReactiveCommand.CreateAsyncTask(
    (_, ct) => DoSearchAsync(query, ct));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在ReactiveUI ViewModel(ReactiveObject)中取消异步任务

来自分类Dev

ReactiveUI 命令取消订阅

来自分类Dev

在ReactiveUi中订阅ThrownException

来自分类Dev

订阅ReactiveUi中的ThrownException

来自分类Dev

ReactiveUI中的复合输出属性

来自分类Dev

如何使用ReactiveUI正确取消ViewView停用任务?

来自分类Dev

使用ReactiveUI连接Viewmodel和模型

来自分类Dev

Resharper为ReactiveUI的ReactiveObject创建自定义重构

来自分类Dev

在没有视图的 ViewModel 中处理异常(在 ReactiveUI 中)

来自分类Dev

ReactiveCommand在ReactiveUI 6中停止工作

来自分类Dev

ReactiveUI和WhenAny中的强制转换

来自分类Dev

在ReactiveUI中绑定到非类变量失败

来自分类Dev

ReactiveUI 订阅 ReactiveList 中的属性更改

来自分类Dev

如何在 splat ReactiveUI 中设置登录?

来自分类Dev

ReactiveUI,View / ViewModel注入和一般的DI

来自分类Dev

在ReactiveUI中加入视图和ViewModel的最低要求

来自分类Dev

具有依赖属性的ReactiveUI绑定并传递给ViewModel

来自分类Dev

为什么ReactiveUI的ObservableForProperty的ToProperty导致F#中的FailInit

来自分类Dev

如何在iOS的ReactiveUI中绑定按钮单击命令

来自分类Dev

如何在ReactiveUI 6.5中显示新的模式形式

来自分类Dev

不要在实体框架中映射ReactiveUI属性

来自分类Dev

ReactiveUI与ICollectionView

来自分类Dev

ReactiveUI测试

来自分类Dev

在View中触发事件时,ReactiveUI在ViewModel上调用命令

来自分类Dev

无法使用 Xamarin-iOS 和 ReactiveUI 在 ViewModel 中绑定 UIButton 和 UITextField

来自分类Dev

使用 SelectMany 在 ReactiveUI 中调用异步方法的单元测试视图模型

来自分类Dev

在Android中取消异步任务

来自分类Dev

如何使用ReactiveUI和DynamicData将可变模型的ObservableCollection <T>绑定到viewmodel的ReadOnlyObservableCollection <T>

来自分类Dev

使用ReactiveUI WPF无法将Enum值列表从ViewModel绑定到视图中的组合框

Related 相关文章

  1. 1

    在ReactiveUI ViewModel(ReactiveObject)中取消异步任务

  2. 2

    ReactiveUI 命令取消订阅

  3. 3

    在ReactiveUi中订阅ThrownException

  4. 4

    订阅ReactiveUi中的ThrownException

  5. 5

    ReactiveUI中的复合输出属性

  6. 6

    如何使用ReactiveUI正确取消ViewView停用任务?

  7. 7

    使用ReactiveUI连接Viewmodel和模型

  8. 8

    Resharper为ReactiveUI的ReactiveObject创建自定义重构

  9. 9

    在没有视图的 ViewModel 中处理异常(在 ReactiveUI 中)

  10. 10

    ReactiveCommand在ReactiveUI 6中停止工作

  11. 11

    ReactiveUI和WhenAny中的强制转换

  12. 12

    在ReactiveUI中绑定到非类变量失败

  13. 13

    ReactiveUI 订阅 ReactiveList 中的属性更改

  14. 14

    如何在 splat ReactiveUI 中设置登录?

  15. 15

    ReactiveUI,View / ViewModel注入和一般的DI

  16. 16

    在ReactiveUI中加入视图和ViewModel的最低要求

  17. 17

    具有依赖属性的ReactiveUI绑定并传递给ViewModel

  18. 18

    为什么ReactiveUI的ObservableForProperty的ToProperty导致F#中的FailInit

  19. 19

    如何在iOS的ReactiveUI中绑定按钮单击命令

  20. 20

    如何在ReactiveUI 6.5中显示新的模式形式

  21. 21

    不要在实体框架中映射ReactiveUI属性

  22. 22

    ReactiveUI与ICollectionView

  23. 23

    ReactiveUI测试

  24. 24

    在View中触发事件时,ReactiveUI在ViewModel上调用命令

  25. 25

    无法使用 Xamarin-iOS 和 ReactiveUI 在 ViewModel 中绑定 UIButton 和 UITextField

  26. 26

    使用 SelectMany 在 ReactiveUI 中调用异步方法的单元测试视图模型

  27. 27

    在Android中取消异步任务

  28. 28

    如何使用ReactiveUI和DynamicData将可变模型的ObservableCollection <T>绑定到viewmodel的ReadOnlyObservableCollection <T>

  29. 29

    使用ReactiveUI WPF无法将Enum值列表从ViewModel绑定到视图中的组合框

热门标签

归档