Ошибка при выполнении запросов параллельной структуры сущностей - PullRequest
0 голосов
/ 29 января 2019

Когда я пытаюсь выполнить два разных запроса на создание сущности одновременно, это дает мне исключение, приведенное ниже

A second operation started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe

Я знаю, что это из-за параллельного выполнения _context в многопоточности.но есть ли альтернативный способ достижения обоих результатов параллельно.Вот мой код.

try
            {

                using (_Context)
                {
                    List<AllotedQuotas> allotedQuotas = new List<AllotedQuotas>();
                    List<Quotas> quotas = new List<Quotas>();

                    Thread t1 = new Thread(() =>
                    {
                        AllotedQuotas ob = new AllotedQuotas(_Context);
                        allotedQuotas = ob.GetAllotedQuotas(pid);
                    });
                    Thread t2 = new Thread(() =>
                    {
                        quotas = _Context._quotas.ToList();
                    });
                    t1.Start();
                    t2.Start();
                    t1.Join();
                    t2.Join();
                    var QuotasList = quotas.Join(allotedQuotas, QID => QID.ID, AID => AID.Quota_ID,
                        (_QutasName, _Alloted) => new Quotas
                        {
                            ID = _QutasName.ID,
                            Quota_Name = _QutasName.Quota_Name,
                            Active = _QutasName.Active
                        }).ToList();
                    return QuotasList;

                }
            }
            catch (Exception ex)
            {
                throw ex.InnerException ?? ex;
            }

1 Ответ

0 голосов
/ 29 января 2019

Вторая операция началась в этом контексте перед завершением предыдущей операции.Ни один из членов экземпляра не гарантированно является потокобезопасным

. Как четко указано в сообщении об ошибке, ваша главная проблема заключается в получении конфликтов между различными потоками.Чтобы решить эту проблему, вы можете использовать оператор mutex или lock, чтобы выделить ресурсы только для одного потока в течение необходимого времени и подождать, пока другие потоки не освободятся.Для lock вы можете проверить здесь .Чтобы узнать о многопоточности (основы и многое другое), вы можете проверить эту отличную страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...