无法将 Redis.RedisValue 转换为任务 <T>

Unable to convert Redis.RedisValue to Task<T>

我正在尝试编写一个通用的 class/interface 来从 Redis 缓存中获取数据。我试图使它通用,因为我们有不同类型的数据,并且很难为每种数据类型编写这么多 classes。

这是我的界面 & class。

public interface IRedisCache<T>
{
    Task<T> GetValue(string code);
}

public class RedisCache<T> : IRedisCache<T>
{

    public RedisCache()
    {

    }

    public Task<T> GetValue(string code)
    {
        var cache = RedisConnectorHelper.Connection.GetDatabase();
        var value = cache.StringGet($"Device_Status:{code}");

        Task<T> myTask = (Task<T>)value;

        return myTask;
    }

}

我在排队时遇到问题:

Task<T> myTask = (Task<T>)value;

问题在于将 Redis.RedisValue 类型转换为 Task<T> 类型。

我收到错误消息

"Cannot convert Redis.Redisvalue type to System.Threading.Tasks.Task<T>"

我正在使用 Stack Exchange.Redis 库,带有 Dot Net 核心 2。

假设该值最初在缓存中存储为 JSON,

cache.StringSet($"Device_Status:{code}", JsonConvert.SerializeObject(myObject)));

然后将返回值反序列化为所需的类型

public async Task<T> GetValue(string code) {
    var cache = RedisConnectorHelper.Connection.GetDatabase();
    var value = await cache.StringGetAsync($"Device_Status:{code}");
    T resultFromCache = JsonConvert.DeserializeObject<T>(value);
    return resultFromCache;
}

我建议将缓存服务重构为

public interface IRedisCache {
    Task<T> GetValue<T>(string code);
}

使用上面建议的实现

public class RedisCache : IRedisCache {
    public async Task<T> GetValue<T>(string code) {
        var cache = RedisConnectorHelper.Connection.GetDatabase();
        var value = await cache.StringGetAsync($"Device_Status:{code}");
        T resultFromCache = JsonConvert.DeserializeObject<T>(value);
        return resultFromCache;
    }
}