내 상황은 이것이다 :한 번에 하나의 스레드에 의해 실행됩니다
- 난 단지 이미 멀티 스레딩에서 실행되는 코드의 일부에 액세스 할 수있는, 그래서 ' 쓰레드가 생성되지 않고 쓰레드가 생성되는 코드 부분에 접근 할 수 없다.
- 상당히 복잡한 (여러 함수가 호출되고 거기에 DB 액세스가 포함됨) 코드 부분이 있는지 확인해야한다. 한 번에 하나의 스레드 만 독점적으로 실행
그래서 내 qu estion은 가능합니까? 그렇다면 가장 좋은 방법은 무엇일까요?
: 내가 작은 조사 노력을했다 여기에 묻고 끝이를 읽기 전에// This method is executed by multiple threads at the same time
protected override void OnProcessItem()
{
MyObject myObject = new MyObject();
// Begin of the code that should be executed only once at a time
// by each thread
bool result = myObject.DoComplexStuff();
if(result == true)
{
this.Logger.LogEvent("Write something to log");
// ... Do more stuff
}
else
{
this.Logger.LogEvent("Write something else to log");
// ... Do more stuff
}
// ... Do more stuff
// End of the code that should be executed only once at a time
// by each thread
}
일부 배경
: 여기
내가 acomplish 노력하고있어 일부 설명 코드https://docs.microsoft.com/en-us/dotnet/standard/threading/overview-of-synchronization-primitives
하지만 여전히 가장 좋은 방법이 무엇인지 또는 mi 시나리오에서 구현하는 방법.
또한 나는 당신이 추측 할 수있는 것처럼 멀티 스레딩 전문가가 아닙니다.
을하고있다
lock
에 대한 몇 가지 의견을 추가 한lock
을 넣어하는 것입니다? 'lock (syncObject) {/ * 한 번에 하나의 스레드 * /}'? 귀하의 경우 그것은'lock (this.Logger) {...}' –중복 된 표시에 대해서는 다른 게시물의 답변이 완전히 적용되지만 질문하는 방식에 따라 어려움이 있습니다. 좀 더 일반적인 방법으로 이것을 찾고 있다면 그것을 찾으십시오. –