【发布时间】:2016-01-27 22:36:09
【问题描述】:
我不确定是错误还是我做错了什么。代码如下:
using StackExchange.Redis;
ConnectionMultiplexer conn = null;
while (conn == null);
{
try
{
conn = ConnectionMultiplexer.Connect("localhost:6379");
}
catch (Exception)
{
conn = null;
Thread.Sleep(TimeSpan.FromSeconds(5));
}
}
var db = conn.GetDatabase();
var transaction = db.CreateTransaction();
var tasks = new List<Task>();
tasks.Add(transaction.HashSetAsync("key", "field", "value"));
if (transaction.Execute())
{
Task.WaitAll(tasks.ToArray());
}
当我使用启动的 redis(Windows 版本 - 2.6、2.8.17、2.8.19)运行它时,一切正常。如果我在循环的几个循环后启动 redis,它要么不会跳转到 if 语句,要么会跳转并在 WaitAll() 上被阻塞。如果我尝试检查 redis 中的值,它们会被存储。
这种情况发生在我们启动server而忘记启动redis的时候。推迟redis启动后,它卡住了。使用批处理而不是事务时也会出现同样的问题。
我与多路复用器的连接是错误的还是错误? (我发现很少有类似的,但我不确定)
【问题讨论】:
-
这表明某些代码路径中的任务未标记为已完成 - 我将不得不进行调查