Я использовал это, чтобы с некоторым успехом обсуждать события:
public static Action<T> Debounce<T>(this Action<T> func, int milliseconds = 300)
{
var last = 0;
return arg =>
{
var current = Interlocked.Increment(ref last);
Task.Delay(milliseconds).ContinueWith(task =>
{
if (current == last) func(arg);
task.Dispose();
});
};
}
Action<int> a = (arg) =>
{
// This was successfully debounced...
Console.WriteLine(arg);
};
var debouncedWrapper = a.Debounce<int>();
while (true)
{
var rndVal = rnd.Next(400);
Thread.Sleep(rndVal);
debouncedWrapper(rndVal);
}
Это может быть не так, как в RX, но это легко понять и использовать.
CDATA в первую очередь полезен, IMO, для удобства чтения человеком. Что касается машины, нет никакой разницы между CDATA и экранированным текстом, кроме длины, самое большее. Возможно, обработка экранированной версии займет немного больше времени, но я скажу , возможно, , потому что это не должно быть существенным фактором, если ваше приложение в основном не привязано к вводу-выводу.
читаете XML? Если нет, просто позвольте синтаксическому анализатору XML делать то, что он делает, и не беспокоиться о CDATA и экранированном тексте. Если люди будут читать этот XML, то, возможно, CDATA может быть лучшим выбором.
Если вы собираетесь иметь элемент XML, значение которого равно XML, то в этом случае CDATA может быть лучшим выбором.
Для получения дополнительной информации см., Например, вопрос XML FAQ, Когда мне следует использовать отмеченный раздел CDATA?
Я видел, как люди использовали CDATA для вышеперечисленного, и это нормально, а также для упаковки вещей, которые не являются XML, например, JSON или CSS, и это лучшая причина для его использования. Проблема возникает, когда люди используют его для цитирования разметки на основе элементов, такой как HTML, и тогда возникает путаница.
Люди не ожидают, что
<![CDATA[<foo>bar</foo>]]>
будет идентичным
<foo>bar</foo>
в том, что касается систем XML.
] См. «Суп тегов RSS», где приведены примеры ужаса экранирования уровней.
Вы также должны быть уверены, что последовательность символов ']]>' никогда не появится в ваших упакованных данных, поскольку это терминатор.
Так что, если не читаемость имеет первостепенное значение, или вы обертываете неэлементную разметку, я рекомендую избегать CDATA.