我有以下方法
public async Task<IHttpActionResult> Send()
{
await doAsyncOperations();
/*
* some other code
*/
return Ok();
}
private Task doAsyncOperations()
{
using (SqlConnection con = new SqlConnection(ConnectionString))
{
con.Open();
string query = @"INSERT STATEMENT";
using (SqlCommand cmd = new SqlCommand(query, con))
{
cmd.ExecuteNonQuery();
}
}
}
但对于doAsyncOperations方法,我收到错误 并非所有代码路径都返回值 ,但此方法为void类型,我不想返回任何值。
当我将任务doAsyncOperations 更改为 void doAsyncOperations 时,我无法使用await关键字。我如何从api方法调用异步方法?
答案 0 :(得分:3)
您实际上并未执行任何异步操作,因此请将方法的返回类型更改为void
,并且不要在控制器方法中使用async/await
。您应该知道何时使用async/await
但简而言之,当您在等待某种类型的I / O完成(如数据库查询或从磁盘读取文件)时,您想要释放该线程时使用它(2)基本例子)。
public IHttpActionResult Send()
{
doOperations();
return Ok();
}
private void doOperations()
{
using (SqlConnection con = new SqlConnection(ConnectionString))
{
con.Open();
string query = @"INSERT STATEMENT";
using (SqlCommand cmd = new SqlCommand(query, con))
{
cmd.ExecuteNonQuery();
}
}
}
您可以更改代码并使ADO.NET调用异步。
public async Task<IHttpActionResult> Send()
{
await doOperationsAsync();
return Ok();
}
private async Task doOperationsAsync()
{
using (SqlConnection con = new SqlConnection(ConnectionString))
{
await con.OpenAsync();
string query = @"INSERT STATEMENT";
using (SqlCommand cmd = new SqlCommand(query, con))
{
await cmd.ExecuteNonQueryAsync();
}
}
}