Что происходит, когда блокируются функции asyn c? C# Блокировка - PullRequest
0 голосов
/ 29 февраля 2020

Мне было интересно, что происходит, когда эта функция вызывается асин c функциями.

public void Method(ClassA myObject)
{
   ClassB converted = Convert.ChangeType(myObject, typeof(ClassB));
   if(!converted) return;

   lock(currentObject)
   {
      if(!currentObject) currentObject = converted;
      else myQueue.Enqueue(converted);
   }

   // change some variables of ‘converted’
}

Что я делаю, так это проверяю, наследуется ли параметр определенным классом c. Если нет, не нужно выполнять остальную часть кода. Если это так, я блокирую переменную 'currentObject'. Если currentObject равен нулю, я назначаю преобразованную переменную. Если нет, я добавляю переменную в очередь для последующего изменения переменной currentObject. Наконец, я изменяю некоторые переменные преобразованного объекта.

Допустим, эта функция вызывается одновременно двумя функциями. Первый из них заблокирует переменную и выполнит свою работу. Что делает второй в этом сценарии?

Выполняет ли он код до оператора блокировки и ждет, пока первый завершит работу sh, а затем продолжит выполнение функции? Он игнорирует оператор блокировки и продолжает изменять некоторые переменные и завершает sh функцию? Она полностью игнорирует функцию?

Я хочу, чтобы я хотел добавить в очередь вторую, так как currentObject больше не равен нулю.

...