У меня есть догадка, указывающая на это - это может привести к очень странным вещам:
private Task<int> logObj(Audit obj)
{
using (var dbContext = new MyDbContext(new PjSqlConnectionStringBuilder()))
{
dbContext.Audits.Add(obj);
return dbContext.SaveChangesAsync();
}
}
В частности, обратите внимание, что вы удаляете контекст, когда операция выполняется. Что вам нужно , так это ожидание ожидающей операции:
private async Task<int> logObj(Audit obj)
{
using (var dbContext = new MyDbContext(new PjSqlConnectionStringBuilder()))
{
dbContext.Audits.Add(obj);
return await dbContext.SaveChangesAsync().ConfigureAwait(false);
}
}
Добавление здесь await
гарантирует, что мы не будем распоряжаться dbContext
до после сохранение фактически сообщило о завершении. ConfigureAwait
в основном необязательный; не нужно для того, чтобы этот код вернулся к syn c -контексту, так что он может не беспокоить.
Обратите внимание, что вам не нужно сделать это в LogRequest
/ LogResponse
; они хороши как написано (хотя я, вероятно, добавлю суффикс Async
на все 3 метода здесь). Тем не менее, ваш код вызова, вероятно, должен await
:
var lr1 = await ar.LogRequest(tr.TransactionId, T.ToString());
, и поскольку мы вернулись на уровень приложений здесь, мы должны позволить syn c -context иметь сказать, что происходит (т.е. не добавляйте ConfigureAwait(false)
здесь)