私の状況はこれです:が一度にただ一つのスレッドによって実行される
- 私はすでにマルチスレッドで実行されているコードの一部へのアクセス権を持っているので、私は」スレッドを作成せず、スレッドが作成されているコード部分にアクセスできない
- かなり複雑な(複数の関数が呼び出され、DBアクセスなどが含まれている)コードの部分が一度に1つのスレッドによって排他的に実行されます
それは可能ですか?もしそうなら、それを行う最善の方法は何ですか?
:私は小さな調査の努力をしました、ここで尋ねると終わりがこれを読む前に// 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){/ *一度に1つのスレッド* /}'?あなたのケースでは、 'lock(this.Logger){...} 'となる可能性があります。 –重複したマーキングについては、他の記事の回答は完全にここに当てはまりますが、より一般的な方法でこれを探しているなら、それを見つけてください。 –