Вопрос относительно правильного использования для задачи в C # - PullRequest
3 голосов
/ 10 марта 2011

У меня есть вопрос относительно Задачи.У меня есть приложение WCF, у которого есть метод ReceiveEmpInfo, который будет вызываться из клиентского приложения.

Приложение сервера WCF:

public void ReceiveEmpInfo(string EmpName, string EmpId)
{
    DifferentClass.SaveEmpToDB(string EmpName, string EmpId);
    return;
}

Мое требование - я хочу вернуть вызов этого метода (ReceiveEmpInfo()) как только я вызываю метод SaveEmpToDB(), я не хочу удерживать клиентский вызов до тех пор, пока метод SaveEmpToDB() не сохранит данные в базе данных.Я думаю об использовании Задачи, но я не уверен, что это решит мое требование.

Пожалуйста, дайте мне ваши предложения.

Спасибо, Джо

Ответы [ 4 ]

2 голосов
/ 10 марта 2011

Да, будет. После вызова Task.Start() ваш метод WCF может вернуться, и задача будет выполняться в «фоновом режиме». Вы должны быть очень осторожны, особенно если вы используете эту службу WCF внутри IIS. Если эти задачи выполняются очень долго, и пул приложений IIS завершает работу (или перезапускается), ваша задача будет сбита [потенциально] в середине ее работы.

Кстати: я предполагаю, что вы имеете в виду: System.Threading.Tasks.Task

0 голосов
/ 11 марта 2011

Если это односторонняя операция «забей и забудь», вы можете просто сделать операцию односторонняя .Это не будет блокировать клиента на время выполнения метода.

[ServiceContract]
interface ISomeContract
{
   [OperationContract(IsOneWay = true)]
   void ReceiveEmpInfo(string EmpName, string EmpId)
}
0 голосов
/ 10 марта 2011

Это очень похоже на этот пост:

Как сделать вызов на мою службу WCF асинхронным?

Я думаю, что ссылки в популярном ответе должны помочь.

0 голосов
/ 10 марта 2011

Используйте обратные вызовы и делайте асинхронные вызовы для БД или чего-либо еще, см. Пример http://msdn.microsoft.com/en-us/library/ca56w9se.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...