Код IT Загрузка примера кода…

Ruby main.rb

Разбор:
- Фрагмент показывает конкретный сценарий, который стартует со строки `Разбор:` и задаёт контекст выполнения.
- Ключевые элементы блока: `Fiber`, `Async`, они определяют основную логику примера.
- По шагам код выполняется так: `Разбор:` -> `- Фрагмент показывает конкретный сценарий, который стартует со строк` -> `- Ключевые элементы блока: `Async`, они определяют основную логику п` -> `- По шагам код выполняется так: `require 'async'` -> `require 'async`.
- Для корректности важно поведение конкурентности: где блокировка, где ожидание, и как исключаются гонки между задачами.
- Типичная ошибка при развитии такого кода — смешивать бизнес-правила и инфраструктурные детали в одном месте; лучше разделять ответственность.

f = Fiber.new do
  puts "1: начало"
  x = Fiber.yield 100  # приостанавливает fiber, возвращает 100 вызвавшему
  puts "3: возобновление с аргументом #{x}"
  "результат"
end

puts "0: до resume"
v1 = f.resume          # → "1: начало", затем возвращает 100
puts "2: после первого resume: #{v1}"
v2 = f.resume("арг")   # → "3: возобновление...", затем возвращает "результат"
puts "4: итог: #{v2}"

Разбор:
- Фрагмент показывает конкретный сценарий, который стартует со строки `Разбор:` и задаёт контекст выполнения.
- Ключевые элементы блока: `Fiber`, `Async`, они определяют основную логику примера.
- По шагам код выполняется так: `Разбор:` -> `- Фрагмент показывает конкретный сценарий, который стартует со строк` -> `- Ключевые элементы блока: `Async`, они определяют основную логику п` -> `- По шагам код выполняется так: `require 'async'` -> `require 'async`.
- Для корректности важно поведение конкурентности: где блокировка, где ожидание, и как исключаются гонки между задачами.
- Типичная ошибка при развитии такого кода — смешивать бизнес-правила и инфраструктурные детали в одном месте; лучше разделять ответственность.

f = Fiber.new do
  puts "1: начало"
  x = Fiber.yield 100  # приостанавливает fiber, возвращает 100 вызвавшему
  puts "3: возобновление с аргументом #{x}"
  "результат"
end

puts "0: до resume"
v1 = f.resume          # → "1: начало", затем возвращает 100
puts "2: после первого resume: #{v1}"
v2 = f.resume("арг")   # → "3: возобновление...", затем возвращает "результат"
puts "4: итог: #{v2}"