使用反应式订阅时如何缓存结果?

问题描述 投票:0回答:0

在 Blazor 服务器端应用程序中,我有一个组件,它基本上是邮政编码的下拉列表。我使用 Reactive 调用端点,该端点通过搜索条件查找匹配的邮政编码。

我按如下方式初始化订阅:

protected override async void OnInitialized()
{
    base.OnInitialized();

    searchSubscription = searchSubject
        .Throttle(TimeSpan.FromMilliseconds(100))
        .Select(async criteria => new
        {
            query = criteria,
            results = await service.FindPostCodesAsync(criteria)
        })
        .Switch()
        .Subscribe(async search =>
        {
            if (search?.results != null)
            {
                postCodes = search.results
                    .OrderBy(p => p.Code).ThenBy(p => p.City).ToList();
            }
            else
            {
                postCodes = new List<PostCode>();
            }

            await InvokeAsync(StateHasChanged);
        });
}

我处理

onInput
事件来捕获用户输入:

private void OnInput(ChangeEventArgs args)
{
    var searchQuery = args.Value?.ToString()?.Trim();
    searchSubject.OnNext(searchQuery);
}

一切正常。

但是,我想缓存结果(使用

MemoryCache
),以便在用户输入现有搜索词时避免调用端点。我知道如何使用内存缓存和分布式缓存。

这是否可以在订阅中开箱即用地实现,或者我是否需要扩展

OnInput
方法以跳过对缓存中存在的条目中的
OnNext
的调用?

c# blazor blazor-server-side system.reactive
© www.soinside.com 2019 - 2024. All rights reserved.