Я использую TPL, но я нахожу этот хитрый модульный тестовый код, который его использует.Есть ли способ дросселировать потоки, используемые параллельной библиотекой задач?
Я стараюсь не introduce a wrapper над этим, поскольку я чувствую, что это может ввести проблемы.
Я понимаю, что вы можете установить близость процессора в TPL, но было бы очень приятно установить максимальный поток (возможно, для домена приложения). Поэтому при установке максимального значения потока в 1 TPL будет принудительно использовать любой поток, на котором он был использован.
Как вы думаете? Возможно ли это (я уверен, что это не так), и должно это возможно?
Edit: вот пример
public class Foo
{
public Foo()
{
Task.Factory.StartNew(() => somethingLong())
.ContinueWith(a => Bar = 1) ;
}
}
[Test] public void Foo_should_set_Bar_to_1()
{
Assert.Equal(1, new Foo().Bar) ;
}
Тест вероятно не пройдет, пока я не ввести задержку. Я хотел бы иметь что-то вроде Task.MaximumThreads=1
, так что TPL будет работать серийно.
Я подозреваю, что вы ошибаетесь. Что вы пытаетесь сделать точно? –
В принципе, я хочу, чтобы мой код запускался последовательно, когда я тестирую, чтобы в моих модульных тестах не было сна. –
В некоторых случаях вы можете использовать Task.WaitAll(), чтобы ваш тест подождал, пока задача не завершится, а затем вы сможете утверждать состояние. В других случаях извлечение логики из задачи и ее тестирование строго последовательно могут быть правильным подходом. Как насчет обновления вашего вопроса с конкретным примером, который я могу попробовать и предоставить решение. –