Делегат. EndInvoke документируется как , тыс должна назвать это (т.е. необходимый - еще протекает, происходят) - от msdn:
Важное Примечание
, Неважно, какую технику Вы используете, всегда называйте EndInvoke для завершения асинхронного вызова.
Управление. EndInvoke в порядке для игнорирования для методов "выпустил-забыл" - от msdn:
можно назвать EndInvoke для получения возвращаемого значения от делегата, если neccesary, но это не требуется.
Однако - если Вы используете Delegate.BeginInvoke
и не хотите результат, рассматриваете использование ThreadPool.QueueUserWorkItem
вместо этого - он сделает жизнь намного легче, и избежит боли IAsyncResult
и т.д.
Предположительно у вас есть какой-то демон который вызывает ваши параллельные программы на узлах. Если это так, вы можете заставить этого общего родителя отключать ASLR для любых дочерних процессов, которые он создает.
Посмотрите в исходниках GDB (7.0 или CVS Head), как это сделать. Суть его в том, чтобы вызвать личность (orig_personality | ADDR_NO_RANDOMIZE)
после fork
и до exec
.
Есть ли причина, по которой вы не можете отобразить пространство общей памяти или использовать именованный FIFO ?
По крайней мере, в некоторых более ранних версиях ASLR в ядре Linux сохраняются смещения при разветвлении . Вместо того, чтобы отключать рандомизацию для ваших процессов, не могли бы вы просто расположить их в иерархии родительских / дочерних процессов, которая сохраняла бы одинаковые смещения между экземплярами двоичного файла, разветвленными одним и тем же родителем?