在c#中将分配的方法指定为async Task <t>

时间:2017-09-03 13:49:49

标签: c# async-await asp.net-web-api2 task

您好我有一个问题:分配为异步任务方法会自动创建一个新任务,然后将方法内的代码运行到刚刚创建的新任务中吗?例如,我只想说我有一个帖子像这样的webapi2中的方法:

public async Task<IHttpActionResult> Post([FromBody]Menu m)
{
    using (MySqlConnection con = new MySqlConnection(""))
    using (MySqlCommand cmd = new MySqlCommand("Insert into Menu (Description,LanguageId,IsActive) values (@Description,@LanguageId,@IsActive) ", con))
    {
        try
        {
            if (con.State == ConnectionState.Closed)
            {
                await con.OpenAsync();
                cmd.Parameters.AddWithValue("@Description", m.Description);
                cmd.Parameters.AddWithValue("@LanguageId", m.LanguageId);
                cmd.Parameters.AddWithValue("@IsActive", m.IsActive);
                await cmd.ExecuteNonQueryAsync();
            }
        }
        catch (MySqlException ex)
        {
            return Content(HttpStatusCode.NotFound,ex);
        }
        finally
        {
           await  con.CloseAsync();
        }
        return Ok("Inserted Succesfully");
    }
}

我会在我的应用程序中使用HttpClient将此方法称为等待。我应该使用

Task.Run( () =>
{
    //database code
});

在post方法内启动任务,或者一旦方法被分配为Task,任务就会自动启动任务?我只想更好地理解异步方法。谢谢!

1 个答案:

答案 0 :(得分:2)

  

我是否应该使用Task.Run在post方法中启动任务,或者在方法分配为任务后立即自动启动任务?

async方法中,async关键字控制为您创建Task对象。您无需再创建另一个。