2017-04-13 99 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