NServiceBusメッセージHandle
メソッドで、データベースにログ情報を保存するクラスがあります。クラスのメソッドを条件付きで別のスレッドで実行します。
ほとんどの場合、ログはメインプロセスとは別のスレッド(およびトランザクション)で実行できます。しかし、すべて同じバックグラウンドスレッドで実行する必要があります(つまり、メインプロセスと同期していないことを意味します)。
ただし、NServiceBusから実際のデータへの外部キー入力を開始した後は、同じスレッド上にある必要があります。ここで
は、いくつかのサンプルコードです:
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;
}
}
も条件付きで別のスレッドに実行を移動するために、条件付き私のトランザクションを使用する方法があるかどうか、私は疑問に思って。条件付きで別のスレッドに実行を移動も に条件付きの私のトランザクションを使用する方法があるかどうか(しかし、それは取引を抑制した場合にのみ。)
これは素晴らしいですが、私の方法の多くはいくつかのパラメータを持っています。大部分は 'string'と' int'ですが、私はそれらを渡す必要があります。この設定でこれを行う方法はありますか? (これはメソッドを呼び出すだけのようですが、各呼び出しでパラメータを使用することはできません)。 – Vaccano
@Vaccano:代わりに 'Action'を使用することができます。あるいは、ラムダ式を使って 'Action'デリゲートを構築するときには、変数をクローズすることができます。 –