Транзакция Redis обмена стеками никогда не выполняется

#c# #stackexchange.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() , но все еще безуспешно. Что может быть не так ?

Ответ №1:

Вы блокируете выполнение транзакции, ожидая асинхронной команды. Рефакторинг для ожидания после выполнения транзакции.

 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.");
}