DP Delphi / Pascal  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Многопоточность и TTask

Задания построены вокруг реальных решений: прочитать фрагмент, найти ошибочное допущение, выбрать безопасную правку и закрепить её тестом. Всего 30 вопросов и 18 задач с кодом; тематические шкалы охватывают «Потоки TThread», «Задачи TTask», «Синхронизация UI», «Отмена», «Наблюдаемость и диагностика» и «Надёжность в эксплуатации».

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На весь тест отведено 85 минут. Код лучше сначала разобрать вручную: правильный вариант должен объяснять механизм, а не только совпадать с одним запуском.
Вопрос 1 из 30
В `ThreadLifecycle` сначала встречается `TWorker = class(TThread)`, а затем `W.WaitFor;`. Какой вывод можно сделать только после чтения обеих строк?
PascalDelphi / Pascal · Потоки TThread
// Отделите правило языка от удачного запуска ThreadLifecycle.
program ThreadLifecycle;
uses System.Classes;
type
  TWorker = class(TThread)
  protected
    procedure Execute; override;
  end;
procedure TWorker.Execute;
begin
  while not Terminated do
    Sleep(10);
end;
var W: TWorker;
begin
  W := TWorker.Create(False);
  W.FreeOnTerminate := False;
  W.Terminate;
  W.WaitFor;
  W.Free;
end.
Вопрос 2 из 30
В практическом сценарии по теме «Задачи TTask» меняются входные данные и порядок действий. Какой вывод остаётся корректным? Сопоставьте обычный путь и изменение состояния.
Вопрос 3 из 30
Две реализации темы «Синхронизация UI» совпадают на обычном примере. Какое различие всё же меняет их договор? Сопоставьте обычный путь и изменение состояния.
Вопрос 4 из 30
В практическом сценарии по теме «Отмена» меняются входные данные и порядок действий. Какой вывод остаётся корректным? Сопоставьте обычный путь и изменение состояния.
Вопрос 5 из 30
Для темы «Наблюдаемость и диагностика» готовят регрессионный набор из двух разных сценариев. Какой набор действительно закрывает обе границы?
Вопрос 6 из 30
Две версии `GracefulShutdown` сохраняют порядок `for T in Tasks do T.Cancel;` → `for T in Tasks do T.Wait;`. Какое свойство останется общим для обеих?
PascalDelphi / Pascal · Надёжность в эксплуатации
// Отделите правило языка от удачного запуска GracefulShutdown.
program GracefulShutdown;
uses System.Generics.Collections, System.Threading;
var Tasks: TList<ITask>;
procedure StopAll;
var T: ITask;
begin
  for T in Tasks do T.Cancel;
  for T in Tasks do T.Wait;
  Tasks.Clear;
end;
begin
  Tasks := TList<ITask>.Create;
  try
    StopAll;
  finally
    Tasks.Free;
  end;
end.
Вопрос 7 из 30
Реализацию темы «Потоки TThread» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться? Сопоставьте обычный путь и изменение состояния.
Вопрос 8 из 30
Обычный пример по теме «Задачи TTask» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник? Сопоставьте обычный путь и изменение состояния.
Вопрос 9 из 30
Реализацию темы «Синхронизация UI» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться? Сопоставьте обычный путь и изменение состояния.
Вопрос 10 из 30
В теме «Отмена» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 11 из 30
Какой граничный результат следует ожидать в `TaskLogging`, когда после `Result := TTask.Run(` выполняется `raise EArgumentException.Create('JobId is empty');`?
PascalDelphi / Pascal · Наблюдаемость и диагностика
// Разберите TaskLogging.
program TaskLogging;
{$APPTYPE CONSOLE}
uses System.Classes, System.Threading, System.SysUtils;
function StartImport(const JobId: string): ITask;
begin
  Result := TTask.Run(
    procedure
    begin
      if JobId = '' then
        raise EArgumentException.Create('JobId is empty');
      Writeln(JobId, ' stage=validate thread=', TThread.Current.ThreadID);
      Writeln(JobId, ' stage=store thread=', TThread.Current.ThreadID);
    end);
end;
var
  Task: ITask;
begin
  Task := StartImport('job-17');
  Task.Wait;
end.
Вопрос 12 из 30
Две реализации темы «Надёжность в эксплуатации» совпадают на обычном примере. Какое различие всё же меняет их договор? Сопоставьте обычный путь и изменение состояния.
Вопрос 13 из 30
Какой сценарий по теме «Потоки TThread» отличит исправную реализацию от версии со скрытым дефектом? Сопоставьте обычный путь и изменение состояния.
Вопрос 14 из 30
Правка по теме «Задачи TTask» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 15 из 30
В теме «Синхронизация UI» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 16 из 30
Какое наблюдение должен зафиксировать тест именно для последовательности `procedure RunWork(const Task: ITask);` → `for I := 1 to 1000000 do` в `CooperativeCancel`?
PascalDelphi / Pascal · Отмена
// Отделите правило языка от удачного запуска CooperativeCancel.
program CooperativeCancel;
uses System.Threading;
procedure RunWork(const Task: ITask);
var I: Integer;
begin
  for I := 1 to 1000000 do
  begin
    Task.CheckCanceled;
    { process one small portion }
  end;
end;
begin end.
Вопрос 17 из 30
Обычный пример по теме «Наблюдаемость и диагностика» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник? Сопоставьте обычный путь и изменение состояния.
Вопрос 18 из 30
Реализацию темы «Надёжность в эксплуатации» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться? Сопоставьте обычный путь и изменение состояния.
Вопрос 19 из 30
Модуль, использующий тему «Потоки TThread», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре? Сопоставьте обычный путь и изменение состояния.
Вопрос 20 из 30
В теме «Задачи TTask» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 21 из 30
В `QueueUi` строка `TTask.Run(procedure` создаёт условие для последующей `TThread.Queue(nil, procedure begin Label1.Caption := N.ToString; end);`. Какой вывод подтверждает этот фрагмент?
PascalDelphi / Pascal · Синхронизация UI
// Проследите фактическое поведение QueueUi.
program QueueUi;
uses System.Classes, System.SysUtils, System.Threading, Vcl.StdCtrls;
procedure Calculate(Label1: TLabel);
begin
  TTask.Run(procedure
    var N: Integer;
    begin
      N := 40 + 2;
      TThread.Queue(nil, procedure begin Label1.Caption := N.ToString; end);
    end);
end;
begin end.
Вопрос 22 из 30
Какой сценарий по теме «Отмена» отличит исправную реализацию от версии со скрытым дефектом? Сопоставьте обычный путь и изменение состояния.
Вопрос 23 из 30
Модуль, использующий тему «Наблюдаемость и диагностика», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре? Сопоставьте обычный путь и изменение состояния.
Вопрос 24 из 30
Какой сценарий по теме «Надёжность в эксплуатации» отличит исправную реализацию от версии со скрытым дефектом? Сопоставьте обычный путь и изменение состояния.
Вопрос 25 из 30
Для темы «Потоки TThread» обычный путь и граничный путь дают разные риски. Какой вывод учитывает оба, не подменяя один другим?
Вопрос 26 из 30
В `TaskException` сначала встречается `Task := TTask.Run(procedure`, а затем `raise EInvalidOperation.Create('worker failed');`. Какое наблюдаемое следствие относится именно к сценарию TaskException?
PascalDelphi / Pascal · Задачи TTask
// Определите реальную гарантию в TaskException.
program TaskException;
uses System.Threading, System.SysUtils;
var Task: ITask;
begin
  Task := TTask.Run(procedure
    begin
      raise EInvalidOperation.Create('worker failed');
    end);
  Task.Wait;
  Writeln('done');
end.
Вопрос 27 из 30
Какое свойство темы «Синхронизация UI» становится решающим на граничном входе или при другом порядке действий? Сопоставьте обычный путь и изменение состояния.
Вопрос 28 из 30
Модуль, использующий тему «Отмена», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре? Сопоставьте обычный путь и изменение состояния.
Вопрос 29 из 30
Какое свойство темы «Наблюдаемость и диагностика» становится решающим на граничном входе или при другом порядке действий? Сопоставьте обычный путь и изменение состояния.
Вопрос 30 из 30
В теме «Надёжность в эксплуатации» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу