在任务中使用一次性对象

问题描述 投票:0回答:1

我正在开发用于处理大量数据的Web应用程序,并使用这些项目创建一个.csv文件。

到目前为止,还不错,但是,我觉得这个过程并不是很快,所以我决定在Task(Threading)中做所有这些事情。

喜欢此:

_ = Task.Run(() => {
    try
    {
        LetsGoCrazy(model);
    }
    catch (Exception ex)
    {
        SaveLog(model, "Error dumbass", ex);
    }
});

我的问题是,如何在任务方法中更新数据库(实体框架核心)?

因为,它向我显示此异常:

System.ObjectDisposedException:'无法访问已处置的对象。导致此错误的常见原因是,处理从依赖项注入中解析出来的上下文,然后稍后尝试在应用程序中的其他位置使用相同的上下文实例。如果在上下文上调用Dispose()或将上下文包装在using语句中,则可能会发生这种情况。如果使用的是依赖项注入,则应让依赖项注入容器负责处理上下文实例。

我相信它必须有另一种方法来完成此任务,而无需在Task内部重新创建实体框架上下文。

c# multithreading task dispose
1个回答
0
投票

您是一个fire-and-forget Task,您的代码的其他部分对此一无所知。您只需要awaitTask.Run()返回的任务即可。

try
{
   await Task.Run(() => LetsGoCrazy(model));
}
catch (SomeException ex)
{
   // ...
}

没有看到您的代码,仅将其放在子任务中并不一定会使它运行得更快。

© www.soinside.com 2019 - 2024. All rights reserved.