2016-09-27 63 views
0

有沒有辦法可以將TaskHttpResponseMessage類型返回給HttpResponseMessage類型?下面是代碼。我們如何返回Task <HttpResponseMessage>返回類型爲HttpResponseMessage類型?

private HttpResponseMessage Process(string receiver,HttpRequestMessage request) 
     { 
       Reciever test = new Reciever(); 
       Task<HttpResponseMessage> res= test.ReceiveAsync(receiver, request); 
       return res;  
     } 

其實我ReceiveAsync方法是異步型的,我不想過程方法是異步類型。

對此有何想法?

謝謝!

+3

當你排除了正確的答案(*「我不希望過程方法是異步類型。「*)你真的需要證明爲什麼這不是一個合適的修復 – spender

+0

如果你堅持你可以做res.Result,但它被認爲是一種不好的做法。如果可能,Microsoft建議使用await/async「一路下來」。 – EJoshuaS

+0

要添加到spender的評論,爲什麼你所做的基礎工作需要是異步操作?如果你想要同步代碼,那很好,但是通過和通過同步代碼。 – Servy

回答

-1

這可能是工作,我認爲:

編輯:不要這樣做,因爲它會死鎖 - 感謝@Servy

private HttpResponseMessage Process(string receiver, HttpRequestMessage request) 
{ 
    return ProcessAsync(receiver, request).Result; 
} 

private async Task<HttpResponseMessage> ProcessAsync(string receiver, HttpRequestMessage request) 
{ 
    Reciever test = new Reciever(); 
    var res = await test.ReceiveAsync(receiver, request); 
    return res; 
} 
+0

最好使用異步/等待「一路下來」而不是使用ProcessAsync.Result。我想OP會要求這樣的東西雖然.. – EJoshuaS

+0

我完全同意異步/等待所有的方式。我絕不會這樣做,但這是他所問的,而且會起作用。 –

+0

只要有同步上下文,此代碼就會死鎖。 – Servy