在 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
的调用?