I have a method in a multi-threaded application and I\'d like the following behavior when this method is invoked:
You can do this using Monitor.TryEnter, but perhaps more simply: Interlocked:
int executing; // make this static if you want this one-caller-only to
// all objects instead of a single object
void Foo() {
bool won = false;
try {
won = Interlocked.CompareExchange(ref executing, 1, 0) == 0;
if(won) {
// your code here
}
} finally {
if(won) Interlocked.Exchange(ref executing, 0);
}
}