Ho una classe che salva le informazioni di registrazione nel database (in un metodo NServiceBus Handle
).Eseguire in modo condizionale i metodi di una classe su un thread separato
La maggior parte delle volte che è possibile eseguire la registrazione su un thread separato (e una transazione) dal processo principale. Ma tutto deve essere fatto sullo stesso thread di background (il che significa che devono essere eseguiti in ordine, ma non sincronizzati con il processo principale).
Tuttavia, una volta avviata la codifica esterna per i dati effettivi da NServiceBus, è necessario che sia sullo stesso thread.
Ecco qualche esempio di codice:
public class MyExample
{
public void LogSomeStuff(Stuff stuff)
{
using (MoveOutsideTransaction())
{
// Do Method Stuff here
dataAccess.SaveChanges();
}
}
public void LogSomeOtherStuff(Stuff stuff)
{
using (MoveOutsideTransaction())
{
// Do Other Method Stuff here
dataAccess.SaveChanges();
}
}
private IDisposable MoveOutsideTransaction()
{
if (loggingOutsideTransaction)
return new TransactionScope(TransactionScopeOption.Suppress);
return null;
}
}
Mi chiedo se c'è un modo di usare la mia transazione condizionale per anche condizionalmente spostare la corsa per un thread diverso. (Ma solo quando si sopprime la transazione.)
Questo sembra fantastico, ma molti dei miei metodi hanno diversi parametri. La maggior parte sono 'string's e' int's ma ho bisogno di passarli. C'è un modo per farlo con questa configurazione? (Questo sembra solo chiamare il metodo, ma non consente i parametri con ciascuna chiamata.) – Vaccano
@Vaccano: puoi usare l'azione invece. Oppure quando costruisci il delegato 'Action' tramite espressione lambda puoi fare chiusure su variabili. –