Сторінка 1 з 5
У даній статті пояснюються асинхронні виклики методів і принципи їх використання, буде показано, як викликати методи асинхронно, як передавати параметри таким методам, і як дізнатися, коли метод завершує виконання. Нарешті, буде показаний використовуваний шаблон команди для спрощення частини коду.
У даній статті пояснюються асинхронні виклики методів і принципи їх використання. Після роботи з делегатами, потоками і асинхронним викликом настала пора поділитися знаннями з цього питання. Використовуються маленькі кроки і безліч прикладів. Взагалі, буде показано, як викликати методи асинхронно, як передавати параметри таким методам, і як дізнатися, коли метод завершує виконання. Нарешті, буде показаний використовуваний шаблон команди для спрощення частини коду. Велика перевага асинхронного виклику методу .NET в тому, що будь-який метод в проекті можна викликати асинхронно без зміни коду методу. Важливо знати безліч хитрощів, що відбуваються за лаштунками всередині .NET, і вони будуть вивчені в статті.
Синхронний проти асинхронного
Слід пояснити синхронний і асинхронний виклики методу на прикладі.
Синхронний виклик методу
Припустимо, є функція Foo (), що вимагає 10 секунд на виконання.
Як правило, коли додаток викликає функцію Foo (), йому доводиться чекати 10 секунд, поки Foo () не завершені і управління не повернеться викликає потоку. Припустимо, треба викликати Foo () 100 разів, тоді буде потрібно 1000 секунд для повернення управління викликає потоку. Такий тип виклику методу є синхронним.
1. Викликається Foo ()
2. Foo () виконується
3. Управління повертається викликає потоку
Тепер Foo () викликається з використанням делегатів, тому що велика частина роботи, яка буде зроблена тут, заснована на делегатів. На щастя, в каркасі .NET вже є делегат, що дозволяє викликати функцію, не приймає параметрів і не повертає значення. Делегат називається MethodeInvoker. Пора випробувати його.
Навіть в прикладі вище Foo () все ще викликається синхронно. Викликає потоку доведеться чекати завершення функції Invoke (), поки управління не повернеться до викликає потоку.
Асинхронний виклик методу
Але що якщо треба викликати Foo () і не чекати завершення її виконання, якщо неважливо, коли вона завершиться? Скажімо, треба просто викликати Foo 100 раз, не чекаючи завершення жодного з викликів функції. По суті, зробити щось під назвою вистрілити і забути. Викликається функція, її не чекають і забувають про неї. І не змінюється ні рядка коду в надскладної вигадливою функції Foo ().
Робиться кілька зауважень про коді вище.
• Рядок коду BeginInvoke () виконує функцію Foo (). Однак управління відразу повертається зухвалому оператору без очікування завершення Foo ().
• Код вище не знає, коли виклик Foo () завершиться, це описано далі.
• BeginInvoke () використовується замість Invoke (). Ще не турбуйтеся про параметри, що приймаються цією функцією; вони детальніше описані далі.
• Приклади коду .NET по криптології [исходник - 38,5 КБ] [демо - 9.96 Кб] • Реалізація AES і DES на C # [исходник - 35,7 КБ] [демо - 13,1 КБ] 1. Введення Криптология - область, що займається забезпеченням безпеки та конфіденційності . Ця область включає в себе багато криптосистем, кажда.
Потрібно було створити кінцевий автомат для чинного продукту. Продукт був інструментом управління проектами і тому мав принцип завдання, заснований на переходах дій користувачів з одного стану в інший. Також потрібно, щоб кінцевий автомат можна було налаштовувати по / для різних.