💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На весь тест отведено 70 минут. Код лучше сначала разобрать вручную: правильный вариант должен объяснять механизм, а не только совпадать с одним запуском.
Вопрос 9 из 25
В теме «Обратные вызовы» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Первую границу заменяют предположением «Поток выполнения callback определяется местом его объявления, а не местом фактического вызова», сохраняя только вторую.
Обе границы заменяют предположениями «Поток выполнения callback определяется местом его объявления, а не местом фактического вызова» и «Отмену callback можно считать завершённой, как только вызывающая сторона перестала его запускать».
Во внешний договор включают только второе свойство: одной совместимой сигнатуры для надёжной интеграции мало; первое считают внутренней деталью.
Во внешний договор включают только первое свойство: контракт обратного вызова должен определять поток, допустимые исключения, возможность повторного вызова и момент отмены; второе оставляют неявным.
Внешний договор должен раздельно учитывать, что контракт обратного вызова должен определять поток, допустимые исключения, возможность повторного вызова и момент отмены, и что одной совместимой сигнатуры для надёжной интеграции мало.
Вопрос 14 из 25
Какой граничный результат следует ожидать в `CallbackContract`, когда после `TTask.Run(` выполняется `on E: Exception do`?
Pascal Delphi / Pascal · Обратные вызовы Копировать
// Разберите поток, число вызовов и передачу ошибки в CallbackContract.
program CallbackContract;
{$APPTYPE CONSOLE}
uses System.SysUtils, System.Threading;
type
TDone = reference to procedure(const Value, ErrorText: string);
procedure LoadAsync(const Callback: TDone);
begin
TTask.Run(
procedure
begin
try
Callback('42', '');
except
on E: Exception do
Callback('', E.ClassName + ': ' + E.Message);
end;
end);
end;
begin
end.
Отмену callback можно считать завершённой, как только вызывающая сторона перестала его запускать.
Исключение из обратного вызова возвращается к месту его регистрации, а не к месту фактического вызова.
Совместимая сигнатура callback означает, что его можно вызвать из любого потока и любое число раз.
Контракт обратного вызова должен определять поток, допустимые исключения, возможность повторного вызова и момент отмены.
Поток выполнения callback определяется местом его объявления, а не местом фактического вызова.