C# 任务返回类型

C# 任务返回类型,c#,C#,我有以下方法 public async Task<IHttpActionResult> Send() { await doAsyncOperations(); /* * some other code */ return Ok(); } private Task doAsyncOperations() { using (SqlConnection con = new Sq

我有以下方法

    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();
                }
            }
}
公共异步任务发送()
{    
等待操作();
/*
*其他代码
*/
返回Ok();
}
私有任务doAsyncOperations()
{
使用(SqlConnection con=newsqlconnection(ConnectionString))
{
con.Open();
字符串查询=@“插入语句”;
使用(SqlCommand cmd=newsqlcommand(query,con))
{
cmd.ExecuteNonQuery();
}
}
}
但对于doAsyncOperations方法,我得到了错误,并不是所有代码路径都返回一个值,但这个方法是void类型,我不想返回任何值


当我将任务doAsyncOperations更改为void doAsyncOperations时,我不能使用wait关键字。如何从api方法调用async方法?

您实际上没有执行任何异步操作,因此请将方法的返回类型更改为
void
,并且不要在控制器方法中使用
async/await
。您应该知道何时使用
async/await
,但简而言之,当您在等待某种类型的I/O完成(如数据库查询或从磁盘读取文件)时想要释放线程时,您可以使用它(两个基本示例)

您可以更改代码并使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();
        }
    }
}
公共异步任务发送()
{    
等待操作同步();
返回Ok();
}
专用异步任务doOperationsAsync()
{
使用(SqlConnection con=newsqlconnection(ConnectionString))
{
等待con.OpenAsync();
字符串查询=@“插入语句”;
使用(SqlCommand cmd=newsqlcommand(query,con))
{
wait cmd.ExecuteNonQueryAsync();
}
}
}

您实际上没有执行任何异步操作,因此请将方法的返回类型更改为
void
,并且不要在控制器方法中使用
async/await
。您应该知道何时使用
async/await
,但简而言之,当您在等待某种类型的I/O完成(如数据库查询或从磁盘读取文件)时想要释放线程时,您可以使用它(两个基本示例)

您可以更改代码并使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();
        }
    }
}
公共异步任务发送()
{    
等待操作同步();
返回Ok();
}
专用异步任务doOperationsAsync()
{
使用(SqlConnection con=newsqlconnection(ConnectionString))
{
等待con.OpenAsync();
字符串查询=@“插入语句”;
使用(SqlCommand cmd=newsqlcommand(query,con))
{
wait cmd.ExecuteNonQueryAsync();
}
}
}

专用异步void doAsyncOperations()
?否则,您将需要从methodShow返回任务该方法的内容您是否打算将其声明为
专用异步任务doAsyncOperations()
?@ChrisWatts
async void
。它应该是
async Task
Private async void doAsyncOperations()
?否则,您将需要从methodShow返回任务该方法的内容您是否打算将其声明为
专用异步任务doAsyncOperations()
?@ChrisWatts
async void
。它应该是
async Task
ADO接口有可以使用的异步方法。@Romoku-I只能这么快地键入;)ADO接口有可以使用的异步方法。@Romoku-I只能这么快地键入;)