33// See the LICENSE file in the project root for more information.
44// Maintainer: Argo Zhang([email protected] ) Website: https://www.blazor.zone 55
6+ using System . Collections . Concurrent ;
7+
68namespace Microsoft . Extensions . DependencyInjection ;
79
810/// <summary>
@@ -18,6 +20,8 @@ internal class DemoLookupService(IServiceProvider provider) : LookupServiceBase
1820 /// <returns></returns>
1921 public override IEnumerable < SelectedItem > ? GetItemsByKey ( string ? key , object ? data ) => null ;
2022
23+ private static readonly ConcurrentDictionary < string , List < SelectedItem > > _cache = [ ] ;
24+
2125 /// <summary>
2226 /// <inheritdoc/>
2327 /// </summary>
@@ -26,17 +30,28 @@ internal class DemoLookupService(IServiceProvider provider) : LookupServiceBase
2630 /// <returns></returns>
2731 public override async Task < IEnumerable < SelectedItem > ? > GetItemsByKeyAsync ( string ? key , object ? data )
2832 {
29- await Task . Delay ( 1 ) ;
30-
3133 IEnumerable < SelectedItem > ? items = null ;
3234 if ( key == "Foo.Complete" )
3335 {
34- var localizer = provider . GetRequiredService < IStringLocalizer < Foo > > ( ) ;
35- items = new List < SelectedItem > ( )
36+ // 使用缓存技术防止多次调用提高应用性能
37+ if ( _cache . TryGetValue ( key , out var value ) )
3638 {
37- new ( ) { Value = "True" , Text = localizer [ "True" ] . Value } ,
38- new ( ) { Value = "False" , Text = localizer [ "False" ] . Value }
39- } ;
39+ items = value ;
40+ }
41+ else
42+ {
43+ // 模拟异步延时实战中大概率从数据库中获得数据
44+ await Task . Delay ( 1 ) ;
45+
46+ var localizer = provider . GetRequiredService < IStringLocalizer < Foo > > ( ) ;
47+ var v = new List < SelectedItem > ( )
48+ {
49+ new ( ) { Value = "True" , Text = localizer [ "True" ] . Value } ,
50+ new ( ) { Value = "False" , Text = localizer [ "False" ] . Value }
51+ } ;
52+ _cache . TryAdd ( key , v ) ;
53+ items = v ;
54+ }
4055 }
4156 return items ;
4257 }
0 commit comments