Действительно не ясно, что Вы подразумеваете, что я боюсь, но если существует возможность делегата, являющегося пустым, необходимо проверить что отдельно на каждом потоке. Обычно Вы сделали бы:
public void OnSeven()
{
DivBySevenHandler handler = EventSeven;
if (handler != null)
{
handler(...);
}
}
Это гарантирует это, даже если EventSeven
изменения в ходе OnSeven()
Вы не доберетесь NullReferenceException
.
, Но Вы правы, что Вам не нужна пустая проверка, если Вы определенно получили подписанный обработчик. Это может легко быть сделано в C# 2 с обработчиком "нет":
public event DivBySevenHandler EventSeven = delegate {};
, С другой стороны, Вы могли бы хотеть своего рода блокировку только, чтобы удостовериться, что у Вас есть "последний" набор обработчиков, если Вы могли бы получить подписки от различных потоков. Я имею пример в моем учебном руководстве по поточной обработке, которое может помочь - хотя обычно я рекомендовал бы не требовать его.
С точки зрения сборки "мусора", издатель события заканчивает со ссылкой на подписчика события (т.е. цель обработчика). Это - только проблема, если издатель предназначен для проживания дольше, чем подписчик.
Вы можете выполнить запрос «начинается с», используя фильтры неравенства:
MyModel.all().filter('prop >=', prefix).filter('prop <', prefix + u'\ufffd')
Выполнение запроса «заканчивается на» потребует сохранения обратной строки с последующим применением той же тактики, что и выше.
Кажется, вы не можете сделать это в общем случае, но можете сделать это для поиска по префиксу (начинается с):