LazyCache icon indicating copy to clipboard operation
LazyCache copied to clipboard

Add TryGetValueAsync that evaluates GetValueFromAsyncLazy

Open b-twis opened this issue 4 years ago • 1 comments

[Use the Thumbs Up reaction to vote for this feature, and please avoid adding comments like "+1" as they create noise for others watching the issue.]

Firstly, actively using your library in multiple places for quite some time and very happy with it.

In the recent inclusion of PR #142 when adding TryGetValue I dont feel like it fits the theme of the library as it does not perform GetValueFromAsyncLazy so it could give you back a factory (AsyncLazy) instead of the actual value

I read the comments and the end goal was something close to a cache.contains (and you can not out param an async method), but would be great it is also fit normal pattern of the other Gets.

I did something similar to below using a wrapper class to handle a similar issue elsewhere.

Here is an attempt of it in LazyCache.

public class CacheResponse<TV>
{
    public bool Found { get; set; }
    public string Key { get; set; }
    public TV Value { get; set; }
}

public virtual async Task<CacheResponse<T>> TryGetValueAsync<T>(string key)
{
    ValidateKey(key);
    
    if (CacheProvider.TryGetValue(key, out T item))
    {                
        return new CacheResponse<T>() { Found = true, Key = key, Value = await GetValueFromAsyncLazy<T>(item, out _) };
    } else
    {
        return new CacheResponse<T>() { Found = false, Key = key};
    }
}

Thoughts? I can make look at making a PR if you are interested.

Thanks,

Basil

b-twis avatar Sep 23 '21 00:09 b-twis

Hello @b-twis I agree with you.

A few months ago I proposed a pull request already including the idea of a TryGetValueAsync

This is my pull request: https://github.com/alastairtree/LazyCache/pull/157

If you like we can discuss about this and propose a new pull request with the TryGetValueAsync improvement only

EnricoMassone avatar Oct 06 '21 10:10 EnricoMassone