Convert an existing c# synchronous method to asynchronous using async / await?

Starting with the synchronous I / O binding method (shown below), how do I use async / await to make it asynchronous?

public int Iobound(sqlConnection conn,sqlTransaction tran)
{
    // this stored procedure takes a few seconds to complete
    sqlCommand cmd = new sqlCommand("MyIoboundStoredProc",conn,tran);
    cmd.CommandType = CommandType.StoredProcedure;

    sqlParameter returnValue = cmd.Parameters.Add("ReturnValue",sqlDbType.Int);
    returnValue.Direction = ParameterDirection.ReturnValue;
    cmd.ExecuteNonQuery();

    return (int)returnValue.Value;
}

The MSDN examples assume that * async methods exist and do not create a guide for I / O binding operations

I can use task Run() and execute iobound() in the new task, but it is not encouraged to create a new task because the operation is not limited by CPU

I want to use async / await, but I still insist on the basic problem of how to continue to convert this method

Solution

Converting this particular method is simple:

// change return type to Task<int>
public async Task<int> Iobound(sqlConnection conn,sqlTransaction tran) 
{
    // this stored procedure takes a few seconds to complete
    using (sqlCommand cmd = new sqlCommand("MyIoboundStoredProc",tran)) 
    {
        cmd.CommandType = CommandType.StoredProcedure;
        sqlParameter returnValue = cmd.Parameters.Add("ReturnValue",sqlDbType.Int);
        returnValue.Direction = ParameterDirection.ReturnValue;
        // use async IO method and await it
        await cmd.ExecuteNonQueryAsync();
        return (int) returnValue.Value;
    }
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>