Здравствуйте, Lloyd, Вы писали:
L>L>public static class FunctionalHelpers
L>{
L> public static Action<T> OnceInTime<T>(Action<T> action)
L> {
L> bool isRuning = false;
L> return t =>
L> {
L> if (isRuning)
L> return;
L> try
L> {
L> isRuning = true;
L> action(t);
L> }
L> finally
L> {
L> isRuning = false;
L> }
L> };
L> }
L>}
L>
Что-то мне подсказывает, что Ваш метод не потокобезопасен. Я бы предложил немного другую реализацию:
int isRuning = 0;
return t =>
{
if (Interlocked.CompareExchange(isRuning, 1, 0) == 1)
return;
try
{
action(t);
}
finally
{
Interlocked.Exchange(1, 0);
}
};
Поправьте если не прав.
P.S. писал в браузере, так что могут быть ошибки в коде, но смысл постарался сохранить