2014-01-15 47 views
2

我正在實現異步方法。但我不確定我所做的是正確的。 例如,方法寫入跟蹤,使一些處理:實現異步方法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已達到限制,因此呼叫結果將從客戶端忽略。 爲了實現在異步方式調用,你應該使用像svcutil一個工具,將產生clientproxy既synchronousasynchronous方法簽名。

查看以下鏈接覆蓋客戶機可以訪問服務操作異步Call WCF Service Operations Asynchronously

+0

那麼爲什麼我可以寫await command.ExecuteScalarAsync();在這裏,我不用等待所有的功能體,而只是爲了它的一部分? – user3027752

+0

這是一個可以做出的選擇,當一個操作可能需要更多時間,並避免使用此方法的客戶端會被阻止一段時間 –

+0

什麼是「更多時間」?我不希望用戶被阻止所以我需要將函數內的所有內容放入async(lambda)調用中? – user3027752