Страницы

Поиск по вопросам

пятница, 12 июля 2019 г.

Странная операция С#

Недавно наткнулся на интересную статью, описывающуюу реализацию Comet приложения на ASP.NET MVC(в конце статьи есть ссылка на demo - открываем в 2-х браузерах/вкладках и переписываемся). Там есть интересный метод: public static void CheckForMessagesAsync(Action> onMessages) { var queued = ThreadPool.QueueUserWorkItem(new WaitCallback(parm => { var msgs = new List(); var wait = new AutoResetEvent(false); using (var subscriber = _messages.Subscribe(msg => { msgs.Add(msg); wait.Set(); })) { // Wait for the max seconds for a new msg wait.WaitOne(TimeSpan.FromSeconds(MaxWaitSeconds)); }
((Action>)parm)(msgs);//что за операция? О_о }), onMessages);
if (!queued) onMessages(new List()); } использование: public void IndexAsync() { AsyncManager.OutstandingOperations.Increment();
ChatServer.CheckForMessagesAsync(msgs => { AsyncManager.Parameters["response"] = new ChatResponse { messages = msgs }; AsyncManager.OutstandingOperations.Decrement(); }); } Хотя метод непонятен чуть менее, чем полностью, но что делает строка, отмеченая комментом? как это операция называется? Не пожалею о разъяснении всего метода.


Ответ

((Action>)parm)(msgs); В этой строчке переменная parm приводится к типу Action< T >. Он является делегатом, который можно вызвать. И он вызывается с параметром msgs Касательно остального кода (оператора =>), возможно ясность внесут лямбда выражения

Комментариев нет:

Отправить комментарий