【问题标题】:HttpClient asynchronous Post C#HttpClient 异步发布 C#
【发布时间】:2014-12-29 03:01:31
【问题描述】:

我有这行代码:

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

但是,我有一个错误提示:“等待”运算符只能在异步方法中使用。考虑使用 'async' 修饰符标记此方法并将其返回类型更改为 'Task'。

于是我去搜索,发现了这个链接:Troubleshooting HTTPClient asynchronous POST and reading results

我已经尝试了答案的作用,但我仍然收到该错误。我该怎么办?谢谢一百万

【问题讨论】:

标签: c# asynchronous async-await httpclient


【解决方案1】:

您需要用async 装饰包含await 调用的方法,并将其返回类型包装在Task<TResult> 中。例如,如果您在 MVC 中从 ControllerIndex() 操作调用它,则必须修改:

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
}

查看 MSDN 上的 async (C# Reference)

还有在没有返回有意义的值时返回Taskvoid 的情况,主要用于定义需要该返回类型的事件处理程序。

对于 async 方法的所有可能返回类型,请查看 MSDN 上的 Async Return Types (C# and Visual Basic)

顺便说一句,这些操作需要在您的项目中引用System.Threading.Tasks

【讨论】:

  • 我不建议返回 Task(对于 void 情况),因为它在 UI 线程等待进程完成时效果最佳。对于 ASP.NET 应用程序,它可能无法正常工作
【解决方案2】:

确保包含这行代码的方法被标记为异步并返回一个Task对象。

http://msdn.microsoft.com/en-us/library/hh156513.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    相关资源
    最近更新 更多