public void ThrowsIfUsedByMultipleThreads()
{
var store = CreateStore();
IDocumentDbSession session = null;
var wait = new ManualResetEventSlim();
ThreadPool.QueueUserWorkItem(state =>
{
session = OpenSession(store);
wait.Set();
});
wait.Wait();
var user = new User() { Id = Guid.NewGuid() };
Assert.Throws<MultiThreadedUseException>(() => session.Get<User>(Guid.NewGuid()));
Assert.Throws<MultiThreadedUseException>(() => session.GetAll<User>());
Assert.Throws<MultiThreadedUseException>(() => session.Save(user, user.Id));
Assert.Throws<MultiThreadedUseException>(() => session.Delete(user));
Assert.Throws<MultiThreadedUseException>(() => session.Dispose());
Assert.Throws<MultiThreadedUseException>(() => session.Save(new User()));
Assert.Throws<MultiThreadedUseException>(() => session.SaveChanges());
Assert.Throws<MultiThreadedUseException>(() => session.TryGet(Guid.NewGuid(), out user));
Assert.Throws<MultiThreadedUseException>(() => session.TryGetForUpdate(user.Id, out user));
Assert.Throws<MultiThreadedUseException>(() => session.Delete(user));
}