Кажется, есть много чего узнать о многопоточном программировании, и все это немного пугает.
Для моих текущих нужд я просто хочу защитить от повторного вызова метода из другого потока до его завершения, и мой вопрос:
Это адекватный (безопасный) способ сделать потокобезопасный метод?
class Foo
{
bool doingWork;
void DoWork()
{
if (doingWork) // <- sophistocated thread-safety
return; // <-
doingWork = true;
try
{
[do work here]
}
finally
{
doingWork = false;
}
}
}
Если этого недостаточно, каков самый простой способ добиться этого?
РЕДАКТИРОВАТЬ: Дополнительная информация о сценарии:
Существует только один экземпляр Foo
Foo .DoWork () будет вызываться из потока ThreadPool в Elapsed событие System.Timers.Timer.
Обычно Foo.DoWork () завершает эоны до того, как в следующий раз называется, но я хочу написать код для малой вероятности, что он будет работать долго, и мне позвонят еще раз, прежде чем закончить.
(Я также недостаточно умен, чтобы быть уверенным, что этот вопрос может быть помечен как независимый от языка, поэтому я этого не сделал. Просветленные читатели, не стесняйтесь делать это, если это возможно.)