2015-09-14 182 views
0

我有一個調用外部web服務的web服務。外部服務在3-4秒後響應。同步web服務內的異步調用

現在所有的調用都是同步的,但是使用異步調用是否有意義(下面的示例)?

它是否有助於提高性能(不會阻塞線程)? GetData()的第一行是不是阻塞了線程?

謝謝。

public class MyService : WebService 
{ 
    [WebMethod] 
    public string GetData() 
    { 
     string response = ExecuteRequest(externalUrl, someContent).Result; 
     return response; 
    } 

    private async Task<string> ExecuteRequest(string url, string content) 
    { 
     var httpResponse = await new HttpClient().PostAsync(url, new StringContent(content)); 
     string responseStr = await httpResponse.Content.ReadAsStringAsync(); 
     return responseStr; 
    } 
} 
+0

爲什麼不讓'GetData'異步? –

+0

這不需要修改呼叫我的服務的客戶嗎? – Cosmin

+1

我不知道如何死鎖線程(http://stackoverflow.com/questions/13140523/await-vs-task-wait-deadlock)將有助於性能:)...很難得到異步方法調用同步代碼正常工作,如果你知道你在做什麼,如果你不知道它是一個非常糟糕的主意。 –

回答

1

要回答你的問題:是的,它使用異步調用是有道理的,但你的例子不是異步的。如果你想使它異步,你必須這樣做:

public class MyService : WebService 
{ 
    [WebMethod] 
    public async Task<string> GetData() 
    { 
     string response = await ExecuteRequest(externalUrl, someContent); 
     return response; 
    } 

    private async Task<string> ExecuteRequest(string url, string content) 
    { 
     var httpResponse = await new HttpClient().PostAsync(url, new StringContent(content)); 
     string responseStr = await httpResponse.Content.ReadAsStringAsync(); 
     return responseStr; 
    } 
}