EF запрос возврата ответа от другого запроса? - PullRequest
0 голосов
/ 02 июля 2019

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

У нас сильно загруженная архитектура микросервисов. Некоторые сервисы имеют более старую архитектуру и неправильно распределяют DataContext, когда заканчивают его использовать. Тогда случается, что мы сталкиваемся с следующей проблемой запроса, возвращающего ответ от другого запроса.

TestContext context = new TestContext();
var results = context.Tests.First(t => t.Id == 1);

List<Task> todo = new List<Task>();
int done = 0;
int exception = 0;
int failed = 0;

for (int i = 0; i < 1000; i++)
{
    //Test newTest = GenerateAddTask(context, todo, i);

    //GenerateRemoveTask(context, todo, newTest);

    Task getItemTask = new Task(() =>
    {
        try
        {

            Test test = context.Tests.First(t => t.Id == 1);

            if (test.Id == 1 && test.Name == "test1")
            {
                done++;
            }
            else
            {
                failed++;
                throw new System.Exception("Found it");
            }
        }
        catch
        {
            exception++;
            context = new TestContext();
        }

    });

    Task getItemTask2 = new Task(() =>
    {
        try
        {

            Test test = context.Tests.First(t => t.Id == 2);

            if (test.Id == 2 && test.Name == "test2")
            {
                done++;
            }
            else
            {
                failed++;
                throw new System.Exception("Found it");
            }
        }
        catch
        {
            exception++;
            context = new TestContext();
        }

    });

    todo.Add(getItemTask);
    todo.Add(getItemTask2);
}

Parallel.ForEach(todo, new ParallelOptions { MaxDegreeOfParallelism = 100 },
t =>
{
    t.Start();
});

Task.WaitAll(todo.ToArray());

В коде выше я создал базу данных со следующими данными

|  Id  |  Name  |
|  1   |  test1 |
|  2   |  test2 |

когда я вызываю строку с идентификатором 1, я ожидаю первую строку, но иногда получаю второй ответ.

В нашей системе это даже хуже, потому что у нас есть куча данных, и отследить, какой запрос вернул неправильное значение, практически невозможно.

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