Правильный способ положить конец BeginInvoke? - PullRequest
13 голосов
/ 12 января 2009

Я недавно читал эту ветку на MSDN . Поэтому я подумывал об использовании лямбда-выражения как способа вызова EndInvoke, просто чтобы убедиться, что все хорошо и аккуратно. Что было бы более правильным?

пример 1:

Action<int> method = DoSomething;

method.BeginInvoke(5, (a)=>{method.EndInvoke(a);}, null);

Пример 2:

Action<int> method = DoSomething;

method.BeginInvoke(5, (a)=>
                                  {
                                      Action<int> m = a.AsyncState as Action<int>;
                                      m.EndInvoke(a);
                                  }, method);

Ответы [ 3 ]

13 голосов
/ 02 февраля 2011

Я не знаю, было ли это возможно еще в январе '09, но сейчас вы можете написать:

method.BeginInvoke(5, method.EndInvoke, null);
12 голосов
/ 12 января 2009

Ваш 2-й пример немного более эффективен, потому что экземпляр делегата "method" не должен быть захвачен в замыкании. Я сомневаюсь, что вы когда-нибудь заметите.

6 голосов
/ 12 января 2009

Возможно, вы захотите прочитать эту ветку в блоге Haacked. У него не было возможности проверить это, но суть в одной из последних строк:

ThreadPool.QueueUserWorkItem(callback => im.Send(to, from, subject, body));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...