| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Асинхронные делегаты |
| Автор: ChiciucMaxim 28.8.2008, 17:05 |
| Добрый день. Вопрос мой об ассинронных делегатах. Я не могу никак понять EndInvoke() дожидается окончания выполнения потока в котором выполняется задаваемая функция или EndInvoke() дожидается возврата задаваемой функции. Вот пример: using System; using System.Collections.Generic; using System.Text; namespace Multithreading { class Program { public delegate void MyDelegate(); static void MyEndMethod(IAsyncResult l) { Console.WriteLine("In end method."); } static void DelegateFunction() { Console.WriteLine("In a delegate function"); } static void Main(string[] args) { MyDelegate ob = new MyDelegate(DelegateFunction); AsyncCallback cb = new AsyncCallback(MyEndMethod); IAsyncResult s = ob.BeginInvoke(cb, null); ob.EndInvoke(s); } } } Результат выполнения тут: In a delegate function. Я так понимаю что ob.EndInvoke(s) ждет лишь возврата функции MyEndMethod() выполняемой через делегат ob, так как не высвечивается "In end method.". Тот же результат получается и при замене "ob.EndInvoke(s)" на "s.AsyncWaitHandle.WaitOne(-1, true)". Не могу понять что же всетаки происходит. Помогите пожалуйста. |
| Автор: mihryak 28.8.2008, 21:34 | ||||
т.е. callback будет вызван уже после завершения ожидания EndInvoke порядок вызовов такой: 1. DelegateFunction() 2. EndInvoke(s) 3. MyEndMethod если последней строчкой в main напишешь
то увидишь, что оба метода отработали |