Я пишу приложение для Windows Phone 7, используя Azure Toolkit . Я также создаю для него модульные тесты, используя NUnit Test Runner для WP7 .
Теперь я хочу протестировать код, который сохраняет данные в таблицу Azure с использованием метода TableServiceContext.BeginSaveChanges (синхронный метод SaveChanges недоступен).
Мне нужно вызвать BeginSaveChanges и подождать, пока он не завершится в том же тестовом методе, например:
[Test]
public void MyTest()
{
ICloudClientFactory factory = new CloudClientFactory();
ITableServiceContext context = factory.ResolveTableServiceContext("MyTable");
// add some entries here
UpdateContext(context);
AutoResetEvent autoResetEvent = new AutoResentEvent(false);
context.BeginSaveChanges((IAsyncResult result) =>
{
context.EndSaveChanges(result);
autoResetEvent.Set();
}, null);
bool set = autoResetEvent.WaitOne(TimeSpan.FromSeconds(5));
if (set)
{
Assert.Pass();
}
else
{
Assert.Fail();
}
}
autoResetEvent.WaitOne () возвращается только по истечении 5-секундного тайм-аута и только после этого вызывается асинхронный обратный вызов для context.BeginSaveChanges .
Почему это?
Я также пытался вызвать context.BeginSaveChanges в потоке из ThreadPool (используя ThreadPool.QueueUserWorkItem ) - но это не помогло.
Это поведение как-то связано с Windows Phone 7 / Silverlight?
Спасибо!