Комментарии 7
Круто, только не thread safe.
Так еще круче:
public class EventTester: IDisposable
{
private readonly Action _postHocTests;
private readonly ManualResetEvent _waitHandle;
private bool _called;
private IAsyncResult _waitToken;
public EventTester(Action postHocTests)
{
_waitHandle = new ManualResetEvent(false);
_postHocTests = postHocTests;
}
#region IDisposable Members
public void Dispose()
{
lock (_waitHandle)
{
Assert.IsTrue(_called, «The event was never handled»);
_postHocTests.EndInvoke(_waitToken);
}
}
#endregion
public void Handler(TSender sender, TArgument args)
{
lock (_waitHandle)
{
_waitHandle.Set();
_waitToken = _postHocTests.BeginInvoke(sender, args, null, null);
}
}
public void Wait(int mullisecondsTimeout)
{
_called = _waitHandle.WaitOne(mullisecondsTimeout);
}
}
Так еще круче:
public class EventTester: IDisposable
{
private readonly Action _postHocTests;
private readonly ManualResetEvent _waitHandle;
private bool _called;
private IAsyncResult _waitToken;
public EventTester(Action postHocTests)
{
_waitHandle = new ManualResetEvent(false);
_postHocTests = postHocTests;
}
#region IDisposable Members
public void Dispose()
{
lock (_waitHandle)
{
Assert.IsTrue(_called, «The event was never handled»);
_postHocTests.EndInvoke(_waitToken);
}
}
#endregion
public void Handler(TSender sender, TArgument args)
{
lock (_waitHandle)
{
_waitHandle.Set();
_waitToken = _postHocTests.BeginInvoke(sender, args, null, null);
}
}
public void Wait(int mullisecondsTimeout)
{
_called = _waitHandle.WaitOne(mullisecondsTimeout);
}
}
+4
А зачем тестировать MicrosoftSubscription.Sync.WebDataProvider? Не уверены, что он работает?
0
В сторону IOCP не пробовали смотреть?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Асинхронное программирование — тестирование событий