2015-09-14 140 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; 
    } 
}