任务返回类型

时间:2017-04-13 16:02:07

标签: c#

我有以下方法

    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方法调用异步方法?

1 个答案:

答案 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();
        }
    }
}