BeginInvoke - а где же ассинхронность?
От: bulatich  
Дата: 06.06.03 12:20
Оценка:
??? BeginInvoke работает как блокирующий вызов метода.

Вот кусок кода:

  delegate void  MakeWorkDelegate();

  void InternalFunc()
  {  
    Debug.WriteLine("InternalFunc=>");
    System.Threading.Thread.Sleep(20000);
    Debug.WriteLine("<=InternalFunc");
    ...................
  }

  public void Func()
  {
    Debug.WriteLine("Func=>");
    new MakeWorkDelegate(InternalFunc).BeginInvoke(null, null);
    Debug.WriteLine("<=Func");
    .......................
  }


И как вы думаете будет выглядеть дебаг?
Вот так у меня выглядит:

Func=>
InternalFunc=>
<=InternalFunc
<=Func

BeginInvoke не возвращается в течении опять же 20 секунд, пока не завершится InternalFunc? Т.е. вызов метода InternalFunc — блокирующий. В чём дело? Это COM+ приложение, если это важно.
Спасибо за участие.
Re: BeginInvoke - а где же ассинхронность?
От: MaxMP Россия  
Дата: 06.06.03 14:00
Оценка:
Здравствуйте, bulatich, Вы писали:

B> Это COM+ приложение, если это важно.


Вот видимо в этом причина, так как простой тест работает как надо:

Func=>
<=Func
InternalFunc=>
<=InternalFunc
Re[2]: BeginInvoke - а где же ассинхронность?
От: bulatich  
Дата: 06.06.03 14:08
Оценка:
Здравствуйте, MaxMP, Вы писали:

B>> Это COM+ приложение, если это важно.


MMP>Вот видимо в этом причина, так как простой тест работает как надо:


Func=>>
MMP><=Func
MMP>InternalFunc=>
MMP><=InternalFunc

Знаю, что простой тест работает. А как это может влиять — я имею в виду, что это приложение COM+?
Re: BeginInvoke - а где же ассинхронность?
От: TK Лес кывт.рф
Дата: 06.06.03 14:59
Оценка: 9 (1)
Hello, "bulatich"

> BeginInvoke не возвращается в течении опять же 20 секунд, пока не завершится InternalFunc? Т.е. вызов метода InternalFunc — блокирующий. В чём дело? Это COM+ приложение, если это важно.

>

У наследников ServicedComponent вызов любого метода через Delegate.BeginInvoke будет блокирующим.
Это ограничение by design. Используйте класс Thread или ThreadPool
Posted via RSDN NNTP Server 1.5
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.