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's입니다 만, 나는 그것들을 전달할 필요가 있습니다.이 설정으로 할 수있는 방법이 있습니까? (이것은 메소드를 호출하는 것처럼 보이지만 호출 할 때마다 매개 변수를 허용하지 않습니다.) – Vaccano
@Vaccano : 대신'Action'을 사용할 수 있습니다. 또는 람다 표현식을 통해'Action' 델리게이트를 만들 때 변수에 대한 클로저를 할 수 있습니다. –