2014-01-31 3 views
0

Я в приложении MVC и пытаюсь установить программное обеспечение на удаленном сервере, запустив функцию WCF на этом сервере; WCF размещен в службе Windows.Задача не выполнена

Поскольку процесс установки занимает много времени, я исполню его асинхронно, например:

ChannelFactory factory = new ChannelFactory<MyClass>(binding, address); 
MyClass channel = factory.CreateChannel(); 
Task task = new Task(() => { channel.LongTimeFunction(); }); 
task.Start(); 

В Таким образом, LongTimeFunction не выполняется вообще.

Это первый раз, когда я использую класс Task, возможно, есть что-то, что мне не хватает?

+0

Установите контрольную точку в свою лямбду. Он попадает? Мое предположение: да. Поместите контрольную точку в сервер. Он попадает? Вы видите HTTP-запрос webservice в Fiddler? – usr

+0

Да, лямбда ударилась. Да, я вижу HTTP-запрос в Fiddler, так или иначе, если я просто вызову функцию без использования задачи, она будет выполнена без проблем. – Sean

+0

Что возвращает сервер? Выполняет ли вы свою работу? Какая ошибка возвращается? Это важно знать, чтобы узнать, где ошибка. Я хочу знать, посылает ли клиент что-то неправильно на сервер или нет. – usr

ответ

0

После запуска задачи вы должны дождаться завершения, если ваш код не будет возвращен, пока функция LongTimeFunction еще не завершена. Вот хороший пример http://msdn.microsoft.com/en-us/library/dd537610(v=vs.110).aspx.

+0

Это именно то, что мне нужно: запустите установку, не дожидаясь ее завершения, чтобы ui не был заблокирован, а затем, возможно, пользователь может запросить процесс установки, чтобы узнать, завершено ли оно. Но функция даже не выполнена ... – Sean

+0

попробуйте эту задачу.Factory.StartNew (() => channel.LongTimeFunction()); –

+0

добавьте его в список задач, а затем дождитесь его завершения: Task.WaitAll (задачи); –

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