实体框架和带有任务的MongoClient

时间:2019-01-15 21:38:31

标签: c# mongodb entity-framework task

在控制台应用程序中,我从一个列表开始,并打开多个任务来处理它们,例如:

    List<Task> tasks = new List<Task>();
    tasks.Add(Task.Run(() => { Elabor(el.Take(1000).ToList(), listLogDequeues); }));
    tasks.Add(Task.Run(() => { Elabor(el.Skip(1000).Take(1000).ToList(), listLogDequeues); }));
    tasks.Add(Task.Run(() => { Elabor(el.Skip(2000).Take(1000).ToList(), listLogDequeues); }));
    Task.WaitAll(tasks.ToArray());

elListLogDequeueConcurrentBag<T>,并且在函数内部使用Interlocked.Add安全地增加了整数。

这使我可以运行三/四个任务并执行操作,但是在Elabor内部使用了Entity Framework和MongoClient,这是在控制台应用程序Main中通过Ninject注入的两个回购协议。每个函数都会构建和使用它的上下文,但是我不了解并发性和线程安全性是否会在这里以及如何受到损害。

EF:

public OutAnag GetAnagById(string id)
{
    try
    {
        using (var c = new Context())
        {
            return c.Anag.AsNoTracking().FirstOrDefault(e => e.Id == id);
        }
    }
    catch (Exception ex)
    {
        return null;
    }
}

蒙哥:

    public bool SetElab(string guid)
    {
        Context dbContext = new Context();

        try
        {
            var filter = Builders<Anag>.Filter.Where(m => m.Guid == guid);
            var update = Builders<Anag>.Update.Set(m => m.DataElaborazione, DateTime.Now);
            var options = new FindOneAndUpdateOptions<Anag>();
            dbContext.Anag.FindOneAndUpdate(filter, update, options);
        }
        catch (Exception e)
        {
            return false;
        }

        return true;
    }

0 个答案:

没有答案