相关疑难解决方法(0)

缓存异步操作

我正在寻找一种缓存异步操作结果的优雅方法.

我第一次有这样的同步方法:

public String GetStuff(String url)
{
    WebRequest request = WebRequest.Create(url);
    using (var response = request.GetResponse())
    using (var sr = new StreamReader(response.GetResponseStream()))
        return sr.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)

然后我让它异步:

public async Task<String> GetStuffAsync(String url)
{
    WebRequest request = WebRequest.Create(url);
    using (var response = await request.GetResponseAsync())
    using (var sr = new StreamReader(response.GetResponseStream()))
        return await sr.ReadToEndAsync();
}
Run Code Online (Sandbox Code Playgroud)

然后我决定我应该缓存结果,所以我不需要经常在外面查询:

ConcurrentDictionary<String, String> _cache = new ConcurrentDictionary<String, String>();

public async Task<String> GetStuffAsync(String url)
{
    return _cache.GetOrAdd(url, await GetStuffInternalAsync(url));
}

private async Task<String> GetStuffInternalAsync(String url)
{
    WebRequest request = …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading async-await concurrentdictionary

18
推荐指数
2
解决办法
7484
查看次数