2014-01-15 4 views
2

Я реализую метод async. Но я не уверен, что то, что я делаю, является правильным. Например, метод записывает трассировки и делает некоторую обработку:реализация async метода wcf

Trace.TraceInformation("Synchronous call"); 
      if (null == data) 
      { 
       Trace.TraceError("InvalidInputException"); 
       OrdersFaultException connEx = new UnknownFaultException(); 
       throw new FaultException<YnknownFaultException>(connEx); 
      } 
      try 
      { 
       object o = await //some call; 
       //check that the object is not null and make some processing 
      } 
} 

нормально ли это? Или я должен изменить его, чтобы не иметь «синхронных» частей Этот код не скомпилирован, он просто показывает, что там есть части кода, которые являются «синхронными»

+4

С одной стороны, ваш код не даже компиляции. Что именно вы пытаетесь достичь? – gleng

+0

Я исправил код, чтобы он был прав. – user3027752

ответ

2

Ваш код правильный, ничего не скажет, что вы этого не сделаете, но ваш код await //some call; будет блокировать выполнение на стороне сервера, но клиент будет синхронизироваться с вызовом до тех пор, пока сторона сервера метода не будет прекращена, или любой из closeTimeoutopenTimeoutreceiveTimeoutsendTimeout достигнет предела, поэтому результат вызова будет проигнорирован с клиентской стороны. Чтобы реализовать вызовы с помощью async, вы должны использовать такой инструмент, как svcutil, который будет генерировать clientproxy с помощью сигнатур методов и asynchronous.

проверить следующую ссылку, которая охватывает как клиент может получить доступ к операции службы асинхронно Call WCF Service Operations Asynchronously

+0

так почему я могу написать команду wait.ExecuteScalarAsync(); и здесь я не пользуюсь ожиданием всего тела функции, но только для ее части? – user3027752

+0

это выбор, который может быть сделан, когда операция может занять больше времени и избежать того, что клиент, использующий этот метод, будет блокироваться на некоторое время –

+0

Что такое «больше времени»? Я не хочу, чтобы пользователь был заблокирован вообще . Так что мне нужно положить все внутри функции в вызов async (лямбда)? – user3027752

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