Асинхронний виклик методу (, AMI, чи ) — у багатопотоковому програмуванні є шаблоном проєктування, у якому місце виклику не блокується під час очікування завершення виконання викликаного коду. Натомість потік, що викликає, отримує сповіщення, коли надходить відповідь. Опитування щодо отримання відповіді є небажаним варіантом.

Опис AMI є шаблоном проєктування для асинхронного виклику потенційно довготривалих методів об'єкта. Він еквівалентний шаблону IOU («I owe you» — «Я вам винен»), описаному в 1996 році Алланом Вермеуленом.

У більшості мов програмування викликаний метод виконується синхронно, тобто в тому самому потоці виконання, з якого його було викликано. Якщо виконання методу займає багато часу, наприклад через завантаження даних з Інтернет, потік, що викликає, блокується до завершення виконання методу. Якщо це небажано, можна запустити «робочий потік» і викликати метод із нього. У більшості середовищ програмування це вимагає написання значної кількості коду, особливо якщо необхідно уникнути накладних витрат, пов'язаних зі створенням великої кількості потоків. AMI розв'язує цю проблему, доповнюючи потенційно довготривалий («синхронний») метод об'єкта його «асинхронним» варіантом, який повертає керування негайно, а також додатковими методами, що спрощують отримання сповіщення про завершення або очікування завершення в пізніший момент часу.

Одним із поширених застосувань AMI є шаблон проєктування активний об'єкт. Альтернативами є синхронний виклик методів та об'єкти future. Прикладом застосунку, який може використовувати AMI, є браузер, що повинен відображати вебсторінку ще до того, як будуть завантажені всі зображення.

Оскільки метод є окремим випадком процедури, асинхронний виклик методу є окремим випадком асинхронного виклику процедури.

Реалізації

Клас Java Клас FutureTask у Java використовує події для розв'язання тієї самої проблеми. Цей шаблон є варіантом AMI, реалізація якого пов'язана з більшими накладними витратами, однак він є корисним для об'єктів, що представляють програмні компоненти.

.NET Framework шаблон Asynchronous Programming Model (APM) (використовувався до .NET Framework 2.0); шаблон Event-based Asynchronous Pattern (EAP) (використовувався в .NET Framework 2.0); шаблон Task-based Asynchronous Pattern (TAP) (використовується в .NET Framework 4.0).

Примітки