Stack Exchange Redis 事务永远不会执行
Stack Exchange Redis transaction is never executed
尝试使用 StackExchange.Redis 库 v2.2.4 执行如下交易:
...
var transaction = Database0.CreateTransaction();
transaction.AddCondition(Condition.KeyExists(key));
await transaction.StringSetAsync(key, value);
bool isCommited = await transaction.ExecuteAsync();
if (isCommited)
{
Logger.Info($"{GUID} Transaction Key {key} SET in Redis");
}
else
{
Logger.Warn($"{GUID} Transaction Key: {key} was NOT SET in Redis.");
}
...
但是事务永远不会执行,这意味着调试器永远不会命中语句 bool isCommited = await transaction.ExecuteAsync()
我也试过同步 Execute()
仍然没有成功。有什么问题吗?
您正在通过等待异步命令阻止事务执行。事务执行后重构为 await。
var transaction = Database0.CreateTransaction();
var stringSetTask = transaction.StringSetAsync(key, value);
transaction.AddCondition(Condition.KeyExists(key));
bool isCommited = await transaction.ExecuteAsync();
if (isCommited)
{
await stringSetTask;
Logger.Info($"{GUID} Transaction Key {key} SET in Redis");
}
else
{
Logger.Warn($"{GUID} Transaction Key: {key} was NOT SET in Redis.");
}
尝试使用 StackExchange.Redis 库 v2.2.4 执行如下交易:
...
var transaction = Database0.CreateTransaction();
transaction.AddCondition(Condition.KeyExists(key));
await transaction.StringSetAsync(key, value);
bool isCommited = await transaction.ExecuteAsync();
if (isCommited)
{
Logger.Info($"{GUID} Transaction Key {key} SET in Redis");
}
else
{
Logger.Warn($"{GUID} Transaction Key: {key} was NOT SET in Redis.");
}
...
但是事务永远不会执行,这意味着调试器永远不会命中语句 bool isCommited = await transaction.ExecuteAsync()
我也试过同步 Execute()
仍然没有成功。有什么问题吗?
您正在通过等待异步命令阻止事务执行。事务执行后重构为 await。
var transaction = Database0.CreateTransaction();
var stringSetTask = transaction.StringSetAsync(key, value);
transaction.AddCondition(Condition.KeyExists(key));
bool isCommited = await transaction.ExecuteAsync();
if (isCommited)
{
await stringSetTask;
Logger.Info($"{GUID} Transaction Key {key} SET in Redis");
}
else
{
Logger.Warn($"{GUID} Transaction Key: {key} was NOT SET in Redis.");
}