从另一个不工作的线程调用存储过程 c#, EntityFramework
Posted
技术标签:
【中文标题】从另一个不工作的线程调用存储过程 c#, EntityFramework【英文标题】:Invoke stored procedure from another thread not working c#, EntityFramework 【发布时间】:2021-10-31 15:06:25 【问题描述】:我有一个存储过程来清理一些数据。
当我从 Program.cs 调用时,就像跟随它不起作用
static void Main(string[] args)
LogCleaner logCleaner = new LogCleaner(appConfiguration);
Task.Run(() => logCleaner.Start());
LogCleaner.Start 函数如下
try
using(UnitOfWork unitOfWork = new UnitOfWork(this.appConfiguration.DefaultConnectionString))
var result = unitOfWork.E3DLogs.CleanUpLogs(this.appConfiguration.CleanUpDayCount);
logger.Info("Clean up stored procedure executed, Result: " + result.ToString());
catch (Exception e)
logger.Error("Error while cleaning the log messages. Error Message: " + e.Message);
unitOfWork.E3DLogs.CleanUpLogs 如下
public int CleanUpLogs(int dayCount)
return _E3DDbcontext.CleanUpLogs(dayCount);
_E3DDbcontext.CleanUpLogs 函数如下
public virtual int CleanUpLogs(Nullable<int> dayCount)
var dayCountParameter = dayCount.HasValue ?
new ObjectParameter("dayCount", dayCount) :
new ObjectParameter("dayCount", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("CleanUpLogs", dayCountParameter);
当我从 Program.cs 调用时,就像跟随它的工作一样
static void Main(string[] args)
LogCleaner logCleaner = new LogCleaner(appConfiguration);
logCleaner.Start();
【问题讨论】:
你永远不会等待你在 task.run() 中创建的任务。会不会是程序退出的速度快于任务的执行速度? 请定义“它不工作” - 实际上发生了什么 【参考方案1】:一个进程(exe)在最后一个非后台线程终止时退出,对于简单的应用程序意味着:当Main
退出时。为Task.Run
提供服务的线程池使用background 线程,因此它们不计入应用程序生命周期。
直接运行代码可以防止这种情况发生。或者,您可以这样做(如果相关):
static Task Main(string[] args)
LogCleaner logCleaner = new LogCleaner(appConfiguration);
var logCleaner = Task.Run(() => logCleaner.Start());
// presumably some other code to run here, because if there wasn't:
// you'd just run logCleaner.Start() directly
return logCleaner; // include the log-cleaner in the application lifetime
【讨论】:
await logCleaner;
和 Main
异步不是更有意义吗
@Charlieface 如果您在Main
中还有其他异步事情要做,那么这是有道理的;没有必要 await
它,否则 - 可以返回它并让调用者担心以上是关于从另一个不工作的线程调用存储过程 c#, EntityFramework的主要内容,如果未能解决你的问题,请参考以下文章