首页 > 解决方案 > 当异步函数被锁定时,会发生什么?钟

问题描述

我想知道当这个函数被异步函数调用时会发生什么。

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’
}

我正在做的是检查参数是否由特定类继承。如果没有,则无需执行其余代码。如果是这样,我锁定“currentObject”变量。如果 currentObject 为空,那么我分配转换后的变量。如果没有,我将变量添加到队列中以稍后更改 currentObject 变量。最后,我修改了转换后的对象的一些变量。

假设这个函数被 2 个函数同时调用。第一个将锁定变量并完成其工作。第二个在这种情况下做什么?

它是否执行代码直到锁定语句并等待第一个完成然后继续执行该功能?它是否忽略了锁定语句并继续更改一些变量并完成功能?它是否完全忽略了该功能?

我想要的是我希望将第二个添加到队列中,因为 currentObject 不再为空。

标签: c#asynchronouslocking

解决方案


推荐阅读