2017-04-13 61 views
0

我有以下方法任务返回类型

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方法我得到了错误并非所有的代码路径返回一个值,但这种方法是无效的类型,我不想回任何价值。

当我改变任务doAsyncOperations无效doAsyncOperations我不能用等待的关键字。我如何从API方法调用异步方法?

+1

'Private async void doAsyncOperations()'?否则,您将需要从方法中返回任务 –

+0

显示该方法的内容 – Nkosi

+0

您是否将其声明为private private async Task doAsyncOperations()? – Lee

回答

2

您实际上没有做任何异步操作,因此将方法的返回类型更改为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(); 
     } 
    } 
} 
+0

查看更新代码 – mkul

+0

ADO接口具有可以使用的异步方法。 – Romoku

+3

@Romoku - 我只能输入这么快;) – Igor