【发布时间】:2015-08-27 02:41:13
【问题描述】:
我正在尝试创建一个可以异步写入 SQL 的日志记录类。我想我在Logger 类中有实现。我的问题是我发现有两种方法可以调用异步函数,哪种方法(如果有)是正确的方法或更明智的方法?
我有一个名为Logger 的类:
public class Logger
{
public Logger() { }
public async Task<int> RecordAsynchSQL(string sid, string lid, string action)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("MyDB..audit_raw_save", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@sid", SqlDbType.VarChar, 50).Value = sid;
cmd.Parameters.Add("@lob_id", SqlDbType.VarChar, 50).Value = lid;
cmd.Parameters.Add("@action", SqlDbType.VarChar, 500).Value = action;
await cmd.Connection.OpenAsync();
await cmd.ExecuteScalarAsync();
}
}
return 1;
}
}
我尝试了以下方法来调用这个方法:
Task task = Task.Run(() => logger.RecordAsynchSQL(id, lid, action))
还有:
Task task = Task.Run(async () => await logger.RecordAsynchSQL(id, lid, action));
【问题讨论】:
-
如果您正在寻找“一劳永逸”的通话方式 - stackoverflow.com/questions/12803012/…。请注意,所有此类机制都会丢失原始线程的上下文,即对于 ASP.Net,您将无法访问
HttpContext.Current来记录跟踪的上下文。如果可能的话,更喜欢常规的await,如i3arnon's answer所示
标签: c# .net asynchronous async-await task