одновременное использование httpcontext.items - PullRequest
0 голосов
/ 15 мая 2019
_httpcontextAccessor.HttpContext.UpdateAskDate(askDate);


 public static void UpdateAskDate(this HttpContext context, DateTime AskDate) => context.Items["AskDate"] = AskDate;

для сохранения даты, когда у меня есть запрос, _httpcontextAccessor регистрируется как синглтон, но у меня всегда есть эта ошибка, у вас есть идеи, почему?

     GraphQL.ExecutionError: Error trying to resolve header. ---> System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
   at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
   at System.Collections.Generic.Dictionary`2.set_Item(TKey key, TValue value)

привет

1 Ответ

0 голосов
/ 15 мая 2019

Контекст здесь немного неясен, но если вы вызываете UpdateAskDate из нескольких потоков одновременно, похоже, вам следует синхронизировать доступ к коллекции Items.Например, вы можете сделать это с помощью оператора lock:

private static readonly object s_lock = new object();
public static void UpdateAskDate(this HttpContext context, DateTime AskDate)
{
    lock (s_lock) //only allow one thread at a time to enter here
        context.Items["AskDate"] = AskDate;
}

Обратите внимание, что вам нужно использовать одну и ту же блокировку для всех обращений к context.Items.

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