在C#中使用缓存多次调用异步函数
发布时间:2020-12-16 00:24:51 所属栏目:百科 来源:网络整理
导读:我有一个可以同时从许多UI元素调用的函数: 在Psudeo代码中 public async TaskCustomer GetCustomer(){ if(IsInCache) return FromCache; cache = await GetFromWebService(); return cache;} 如果10个UI元素同时全部调用,我如何确保只调用一次GetFromWebSer
我有一个可以同时从许多UI元素调用的函数:
在Psudeo代码中 public async Task<Customer> GetCustomer(){ if(IsInCache) return FromCache; cache = await GetFromWebService(); return cache; } 如果10个UI元素同时全部调用,我如何确保只调用一次GetFromWebService(),这是非常昂贵的. 解决方法
使用懒惰.
//the lazy can be changed to an instance variable,if that's appropriate in context. private static Lazy<Task<Customer>> lazy = new Lazy<Task<Customer>>(() => GetFromWebService()); public Task<Customer> GetCustomer(){ return lazy.Value; } 这将确保只创建一个Task,并且在至少发出一个请求之前不会进行Web服务调用.然后,任何将来的请求将返回可以等待获取值的相同任务(无论是正在进行还是完成). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |