我正在开发用于处理大量数据的Web应用程序,并使用这些项目创建一个.csv文件。
到目前为止,还不错,但是,我觉得这个过程并不是很快,所以我决定在Task(Threading)中做所有这些事情。
喜欢此:
_ = Task.Run(() => {
try
{
LetsGoCrazy(model);
}
catch (Exception ex)
{
SaveLog(model, "Error dumbass", ex);
}
});
我的问题是,如何在任务方法中更新数据库(实体框架核心)?
因为,它向我显示此异常:
System.ObjectDisposedException:'无法访问已处置的对象。导致此错误的常见原因是,处理从依赖项注入中解析出来的上下文,然后稍后尝试在应用程序中的其他位置使用相同的上下文实例。如果在上下文上调用Dispose()或将上下文包装在using语句中,则可能会发生这种情况。如果使用的是依赖项注入,则应让依赖项注入容器负责处理上下文实例。
我相信它必须有另一种方法来完成此任务,而无需在Task内部重新创建实体框架上下文。
您是一个fire-and-forget Task
,您的代码的其他部分对此一无所知。您只需要await
从Task.Run()
返回的任务即可。
try
{
await Task.Run(() => LetsGoCrazy(model));
}
catch (SomeException ex)
{
// ...
}
没有看到您的代码,仅将其放在子任务中并不一定会使它运行得更快。