Ohne Transaktionsbereich Dies funktioniert jedoch gut. Wenn ich das Transaktionsbereich hinzufügt
Code: Select all
TransactionManager.ImplicitDistributedTransactions = true;ausführbarer Code im Worker -Dienst lautet wie folgt:
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
int number = 0;
try
{
while (!stoppingToken.IsCancellationRequested)
{
number = number + 1;
using var transactionScope = TransactionUtils.CreateTransactionScope();
await SaveDummyDataIntoTable2Dapper($"saved {number}").ConfigureAwait(false);
await messageSession.Publish(new MyMessage { Number = number }, stoppingToken)
.ConfigureAwait(false);
_logger.LogInformation("Publishing message {number}", number);
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
transactionScope.Complete();
_logger.LogInformation("Transaction complete");
await Task.Delay(1000, stoppingToken);
}
}
catch (Exception e)
{
_logger.LogError("Exception: {ex}", e);
throw;
}
}
< /code>
Transaktionsbereich wird mit den folgenden Parametern erstellt: < /p>
public class TransactionUtils
{
public static TransactionScope CreateTransactionScope()
{
var transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = IsolationLevel.ReadCommitted;
transactionOptions.Timeout = TransactionManager.MaximumTimeout;
return new TransactionScope(TransactionScopeOption.Required, transactionOptions,TransactionScopeAsyncFlowOption.Enabled);
}
}
< /code>
Code zum Speichern in Datenbank verwendet eine einfache Dapper GenericRepository -Bibliothek: < /p>
private async Task SaveDummyDataIntoTable2Dapper(string data)
{
using var scope = ServiceProvider.CreateScope();
var mainTableRepository =
scope.ServiceProvider
.GetRequiredService();
await mainTableRepository.InsertAsync(new MainTable()
{
Data = data,
UpdatedDate = DateTime.Now
});
}
< /code>
Ich musste hier den Umfang verwenden, da das Repository skopiert ist und der Arbeiter Singleton ist, sodass es nicht direkt injiziert werden kann. hängt).
Ohne Transaktionsfernrohr alles funktioniert gut.>
Mobile version