【问题标题】:Why is Task<HttpResponseMessage> not awaitable in my project?为什么我的项目中不能等待 Task<HttpResponseMessage>?
【发布时间】:2014-09-22 12:04:32
【问题描述】:

我有一个针对 .NET 4 框架的项目,并且我创建了一个更新数据库中数据的方法。该方法本身还使用一个标志 (runAsync) 来确定它是否应该异步运行。我收到“System.Threading.Tasks.Task 不可等待”的错误,但我在另一个应用程序中使用相同的代码,它工作正常。我做错了什么,或者我错过了什么才能让它工作?

代码如下:

public static async Task<object> UpdateData(SecureData data, string userAgent, bool runAsync)
{
    object result;

    try
    {
        using (HttpClient client = new HttpClient())
        {
            client.BaseAddress = new Uri(_configUri);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage response = runAsync
                                                ? await client.PutAsJsonAsync(String.Format("api/securedata/update/{0}", data.Token), data)
                                                : client.PutAsJsonAsync(String.Format("api/securedata/update/{0}", data.Token), data).Result;

            result = runAsync
                            ? await response.Content.ReadAsAsync<object>()
                            : response.Content.ReadAsAsync<object>().Result;

            response.EnsureSuccessStatusCode();
        }
    }
    catch (HttpRequestException ex)
    {
        throw new HttpRequestException(ex.Message, ex.InnerException);
    }

    return result;
}

【问题讨论】:

  • 您的目标是 .NET 4 - 您是否安装了异步兼容包?通常 async/await 需要 .NET 4.5。
  • @JonSkeet:不应该在 ASP.NET 上使用异步兼容包。
  • @StephenCleary:啊,谢谢。
  • 我很好奇那个 runAsync 参数。你能说出你为什么这样做吗?
  • 我使用 runAsync 参数只是为了让方法可以同步和异步运行。

标签: c# asp.net-mvc asynchronous async-await


【解决方案1】:

【讨论】:

  • 哦,我认为 async/await 在 4.0 和 4.5 中都可用。谢谢!
  • @freakinthesun:它适用于桌面/移动应用,但不适用于 ASP.NET。
【解决方案2】:

安装异步

工具 --> NuGet --> 数据包管理器控制台

在代码下方运行

Install-Package Microsoft.Bcl.Async -Version 1.0.168 

参考: https://www.nuget.org/packages/Microsoft.Bcl.Async

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-10
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多