У вас могут быть две проблемы.Первый - тот, который вы указали: вы не можете ожидать несколько дескрипторов ожидания в потоке STA (состояние квартиры потока MSTest).Мы можем исправить это с помощью потока MTA, созданного вручную.
public static void OnMtaThread(Action action)
{
var thread = new Thread(new ThreadStart(action));
thread.SetApartmentState(ApartmentState.MTA);
thread.Start();
thread.Join();
}
В среде также установлен максимальный предел ожидания .В .NET 2.0 он, похоже, жестко запрограммирован на 64. Ожидание больше, чем предел, даст NotSupportedException
.Вы можете использовать метод extension для ожидания на всех дескрипторах ожидания в чанках.
public static void WaitAll<T>(this List<T> list, TimeSpan timeout)
where T : WaitHandle
{
var position = 0;
while (position <= list.Count)
{
var chunk = list.Skip(position).Take(MaxWaitHandles);
WaitHandle.WaitAll(chunk.ToArray(), timeout);
position += MaxWaitHandles;
}
}
И вы бы смонтировали их вместе, как показано в тесте (в части Act или Assertтест)
OnMtaThread(() => handles.WaitAll(Timespan.FromSeconds(10)));