【发布时间】: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