title: Is ExpandoObject thread-safe?
body: <p>Simple question, but <a href="https://docs.microsoft.com/en-us/dotnet/api/system.dynamic.expandoobject" rel="nofollow noreferrer">docs</a> are silent. In <a href="https://referencesource.microsoft.com/#System.Core/Microsoft/Scripting/Actions/ExpandoObject.cs" rel="nofollow noreferrer">sources</a> there are some locks, so <em>probably</em> it is, but I want to know for sure.</p>
  
  <p>Maybe there is an existing answer before I attempted to write a test? If none, how would such test looks like (I am not sure what exactly I have to test to answer if it's thread-safe or not)?</p>
  
  <p>Background: I am using <code>CSharpScript</code> to run user scripts where <em>globals</em> will contain <code>dynamic</code> properties (<code>ExpandoObject</code> instances). Those properties will contain used in script methods (<code>Action&lt;T&gt;</code>), added and removed dynamically from another thread. This will provide user with nicer syntax: <code>ExpandoProperty.BlaBlaBla(parameters);</code> compared to using e.g. dictionary: <code>DictionaryProperty["BlaBlaBla"](parameters);</code></p>