2014-12-29 48 views
1

我有這行代碼:HttpClient的異步郵政C#

HttpResponseMessage aResponse = await aClient.PostAsync(theUri, theContent); 

然而,我有一個錯誤,指出:在「等待」操作符只能異步方法內使用。考慮使用「異步」修飾符標記此方法,並將其返回類型更改爲「任務」。

於是我去搜索,發現此鏈接:Troubleshooting HTTPClient asynchronous POST and reading results

我已經試過了答案做什麼,但我仍然得到這個錯誤。我該怎麼辦?謝謝百萬

+0

要了解'async-await',請閱讀[my'async-await'curation](http://curah.microsoft.com/45553/asyncawait-general)上的文章。 –

回答

6

您需要裝飾包含await調用該方法async和包裹它的返回類型Task<TResult>。例如,如果你在一個MVC的Controller一個Index()行動調用它,你將不得不修改:

public ActionResult Index() 
{ 
    HttpResponseMessage aResponse = await aClient.PostAsync(theUri, theContent); 
    //will give you the error you are getting 
} 

..所以就變成:

public async Task<ActionResult> Index() 
{ 
    HttpResponseMessage aResponse = await aClient.PostAsync(theUri, theContent); 
    //no error here 
} 

對看一看async (C# Reference) MSDN。

當沒有返回有意義的值時,還有返回Task的情況,void主要用於定義需要返回類型的事件處理程序。

對於所有可能的返回類型async方法,請參閱MSDN上的Async Return Types (C# and Visual Basic)

另外,這些操作需要在項目中引用System.Threading.Tasks

+1

我不會推薦返回任務(對於無效的情況),因爲當UI線程正在等待該過程完成時它效果最好。對於ASP.NET應用程序,它可能無法正常工作 –