相对较新的WebAPI和异步所以请容忍我所说的“正常”的静态方法....我可以从一个异步API控制方法
我有一些在其操作的应用程序的WebAPI。实质上,这些调用SQL Server存储过程。
已经工作正常,但我期待,使通过转换方法是异步更高效和稳健。
让我告诉一个基法 - 因为他们都是相似....
旧版本
[System.Web.Http.HttpGet]
public A_Class MyAPIMethod(Guid b)
{
using (SqlConnection DB = new SqlConnection(this.dbConnString))
{
return MyStaticHelper.A_Static_Method(DB, b);
}
}
新版本(异步我认为&希望)
[System.Web.Http.HttpGet]
public async Task<A_Class> MyAPIMethodAsync(Guid b)
{
var db = new SqlConnection(this.dbConnString);
try
{
var Result = await Task.Run(() => MyStaticHelper.A_Static_Method(db, b));
return Result;
}
finally
{
db.Dispose();
}
}
我想这一点是确定的 - 我只是不知道什么,如果有什么我需要做我的静态辅助方法。 我是否需要将其转换为异步? 我已经打电话给这个,这一切似乎都行得通 - 我可以做一个完整性检查请。 赞赏任何建议....
静态辅助方法....
public static A_Class A_Static_Method(SqlConnection dbConn, Guid A_Param)
{
SqlDataReader reader = null;
try
{
try
{
if (dbConn.State != ConnectionState.Closed) dbConn.Close();
using (var cmd = new SqlCommand("MyStoredProc", dbConn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@sp_Param", SqlDbType.UniqueIdentifier).Value = A_PAram
dbConn.Open();
reader = cmd.ExecuteReader();
var A_Class = StaticFunctionToGetInstanceOfClassFromResults(reader);
A_Class.rc = 1;
return A_Class
}
}
catch (Exception)
{
//server error
return new A_Class(A_ClassError.beApiError);
}
}
finally
{
if (reader != null) reader.Close();
dbConn.Close();
}
}
为什么你认为在另一个线程上运行该方法并等待结果比同步运行更“高效且健壮”?想象一下,我克隆了你并要求你做一些事情。为什么要让克隆人完成任务并等待它完成比只是自己完成任务更好? –
@Daniel Kelley说得很好。 AntDC,异步编程有开销,应该根据需要使用,而不仅仅是使用它。在这种情况下,因为你在这里所做的只是运行一个存储过程,所以没有必要。如果这是一个长期运行的程序,我会从那里开始,并考虑让它更有效率。我也不建议在静态类中有任何保持状态的数据库连接。 –
我没有明说我们这个相对较新的给我.... 我想不会阻塞线程作为我的API可能有大量的并发请求的.... 无论如何,所以怎么样,如果我不得不从我的API调用外部API。 异步操作会更适用吗? 此外,dbConnString是我的BaseController类的一个属性,我将它传递给我的静态方法。 – AntDC