【问题标题】:Task cancelled error when using redis cache in c#在c#中使用redis缓存时任务取消错误
【发布时间】:2013-05-18 04:36:38
【问题描述】:

我为我的网页数据库构建了一个进程外缓存。虽然当我尝试用它做某事(Set,Get)时,我收到以下错误:

A task was canceled

这是我的 redis 缓存代码。任何帮助都会很棒。谢谢

public class RedisCache : ICache
{
    private RedisConnection redis;

public RedisCache()
{
    redis = new RedisConnection("127.0.0.1");
    redis.Open();
}

public object Get(string key)
{
    var method = redis.Strings.Get(0, key);
    if (method == null)
        return null;
    BinaryFormatter bf = new BinaryFormatter();
    MemoryStream ms = new MemoryStream(method.Result);
    object obj = bf.Deserialize(ms);
    return obj;
}

public void Set(string key, object value)
{
    MemoryStream ms = new MemoryStream();
    BinaryFormatter bf = new BinaryFormatter();
    bf.Serialize(ms, value);
    redis.Strings.Set(0, key, ms.ToArray());
}

}

【问题讨论】:

  • 您使用的是哪个版本?如果我们假设它正确打开,那应该没问题。我不在电脑前,但我可以稍后添加示例
  • 任何:参考属性、文件属性(在资源管理器中右键单击 booksleeve.DLL),或者 nuget 包管理器会告诉您
  • k;您可以将“打开”行更改为:redis.Wait(redis.Open()); 吗?我想知道它是否无法打开...
  • 可能是防火墙; redis 是在同一台云机上运行的吗?还是其他?
  • 我的意思是:你大概有一个 redis 服务器在某个地方运行。那是什么地方?是在同一台机器上吗?如果没有 - 你知道它的名字吗?知识产权? (我不需要知道名字/IP是什么……我只是问你对服务器了解多少)

标签: c# redis azure-caching booksleeve


【解决方案1】:

“已取消”状态表示消息已排队,但无法写入流(例如,流从未打开)。从 1.3 开始,有两种主要方案:

  • 消息被排队因为连接没有打开,后来发现无法连接
  • 由于先决条件失败,交易未发出,或因“监视”键已更改而中止

由于您没有使用事务,因此听起来好像一开始就无法打开连接。您可以通过查看从Open() 返回的Task 来检查这一点 - 最简单的是:

redis.Wait(redis.Open());

这里的Wait 方法类似于通常的task.Wait(),但它具有内置的超时支持,以及其他一些方便生活的东西 - 我鼓励使用它(主要是为了方便);同样,redis.Wait(method)method.Result 更可取——但两者通常都可以正常工作。您也可以awaitContinueWith 任务 - 这里的关键点是您需要检查它是否打开 - 唯一的方法是查看@987654330 会发生什么@。

请注意,连接有一些用于检测故障(错误和关闭)的事件。您可能还会发现打开与ConnectionUtils 的连接很方便,它具有针对一系列常见场景的一些内置处理。

最后观察:BinaryFormatter ...您可能会发现,当您对 API 进行版本化/重构时,您无法加载旧数据 - 不要说我没有警告过您;p 我会推荐任何 基于合同的序列化程序:XmlSerializerDataContractSerializer、JSON.NET 或 protobuf-net(后者是密集二进制 - 非常适合不透明的进程外 BLOB,例如 redis,虽然我听说作者不过是麻烦)。

【讨论】:

    猜你喜欢
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2017-06-29
    • 2017-06-28
    • 2017-05-24
    • 2021-06-06
    相关资源
    最近更新 更多