Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация методов делегата 
:(
    Опции темы
Idsa
Дата 19.7.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Решил посмотреть в Reflector'е реализацию BeginInvoke для делегата. Был удивлен тем, что, в какой делегат ни глянь, реализация пустая.
Как быть? smile


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
mihryak
Дата 19.7.2008, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



она, вроде как, не вполне пустая
все эти виртуальные методы помечены атрибутом
Код

[MethodImpl(0, MethodCodeType=MethodCodeType.Runtime)]

если я правильно понял скудное описание в msdn'e, реализация зависит от рантайма
сам же механизм работы описан так
Цитата

Asynchronous delegates allow you to call a synchronous method in an asynchronous manner. When you call a delegate synchronously, the Invoke method calls the target method directly on the current thread. If the compiler supports asynchronous delegates, it will generate the Invoke method and the BeginInvoke and EndInvoke methods. If the BeginInvoke method is called, the common language runtime (CLR) will queue the request and return immediately to the caller. The target method will be called on a thread from the thread pool. The original thread, which submitted the request, is free to continue executing in parallel with the target method, which is running on a thread pool thread. If a callback method has been specified in the call to the BeginInvoke method, the callback method is called when the target method returns. In the callback method, the EndInvoke method obtains the return value and any in/out parameters. If no callback method is specified when calling BeginInvoke, EndInvoke can be called from the thread that called BeginInvoke.

т.е. происходит что-то вроде вызова ThreadPool.QueueUserWorkItem
PM MAIL ICQ   Вверх
Idsa
Дата 20.7.2008, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(mihryak @  20.7.2008,  03:29 Найти цитируемый пост)
т.е. происходит что-то вроде вызова ThreadPool.QueueUserWorkItem 

Примерно это я и ожидал там увидеть, ибо кто-то из классиков ASP.NET (то ли Макдональд, то ли Эспозито) писал, что при реализации асинхронных страниц не стоит использовать метод BeginInvoke делегата, потому что он использует поток из пула.

Цитата(mihryak @  20.7.2008,  03:29 Найти цитируемый пост)
If the compiler supports asynchronous delegates, it will generate the Invoke method and the BeginInvoke and EndInvoke methods.

Судя по этой фразе, требования реализации BeginInvoke и EndInvoke нет в CLS, но есть в CLI. Так?

mihryak, спасибо за конструктивную дискуссию. +1.

Это сообщение отредактировал(а) Idsa - 20.7.2008, 01:59


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
mihryak
Дата 20.7.2008, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



Цитата(Idsa @  20.7.2008,  02:55 Найти цитируемый пост)
Судя по этой фразе, требования реализации BeginInvoke и EndInvoke нет в CLS, но есть в CLI. Так?

хм.. я это понял иначе: делегат - это вполне себе CTS-тип, и BeginInvoke тоже стандартен, но их конкретное поведение определяется рантаймом
вот ещё нашёл ссылку, где о делегатах говорится как о CTS-типе

а штука-то и правда загадочная smile
PM MAIL ICQ   Вверх
Idsa
Дата 21.7.2008, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(mihryak @  20.7.2008,  06:34 Найти цитируемый пост)
хм.. я это понял иначе: делегат - это вполне себе CTS-тип, и BeginInvoke тоже стандартен, но их конкретное поведение определяется рантаймом

Да-да, с недоCTS я погорячился.

Вообще интересно было бы поглядеть, как там внтури организовывается работа со ThreadPool, ведь ThreadPool.QueueUserWorkItem работает с фиксированным делегатом (т. е. с методами с фиксированной сигнатурой)...


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Idsa
Дата 23.7.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Схожу-ка я с этим вопросом на RSDN...


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
mihryak
Дата 2.8.2008, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



Цитата(Idsa @  23.7.2008,  12:14 Найти цитируемый пост)
Схожу-ка я с этим вопросом на RSDN... 

прояснилось что-нибудь? smile 
PM MAIL ICQ   Вверх
Idsa
Дата 3.8.2008, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(mihryak @  2.8.2008,  16:10 Найти цитируемый пост)
прояснилось что-нибудь? 

Вот эта тема: http://rsdn.ru/Forum/message/3032669.flat.aspx#3032669
На RSDN, как и всегда, люди не очень общительные и многословные smile
И так и не понял, как можно написать необходимый wrapper.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Skynin
Дата 8.8.2008, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 1
Всего: 10



PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1159 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.