2015-02-04 2 views
0

Мне нужно поднять событие, не блокируя вызывающий метод, каким образом это сделать?C# Обработка события в другом потоке, с которого следует начинать Задача

1) Запустить задачу и поднять событие из задачи? :

//Body of listener function above 
if (EventFound) 
    Task.Factory.StartNew(() => 
    { 
    SendEvent(); 
    }); 

2) Запустить задачу внутри EventHandler:

public void OnEventRaised(....) 
{ 

    Task.Factory.StartNew(() => 
    { 
    //Do lengthy stuff here 
    }); 

} 

ли либо блокировать вызывающую функцию?

ответ

1

Ни один из ваших примеров блоков звонящий.

В вашем первом примере вызывающий создает новый поток и последовательно вызывает всех подписчиков (если их несколько). Во втором варианте абонент создает поток, поэтому каждый из них будет иметь собственный поток.

Обратите внимание, что оба варианта могут привести к сбою приложения, если какой-либо из обработчиков событий завершится с ошибкой.

Вы можете получить более уместную информацию отсюда: Raising events asynchronously

Смежные вопросы