Не ждите инициализации экземпляра класса и продолжайте с кодом c # - PullRequest
0 голосов
/ 20 декабря 2018

Я довольно новичок в программировании, поэтому вопрос может показаться вам глупым:

for (int i = 0; i < 20; i++)
{
   driver[i] = new ChromeDriver(service, options[i]);
}

Я пытаюсь создать веб-бота.Он должен открывать несколько окон Chrome (что работает нормально)

часть, когда он открывает Chrome находится на линии 3. Каждое открытие занимает около 5-6 секунд.

Так что мой вопрос, когдаЯ инициализирую новый экземпляр ChromeDriver, могу ли я продолжить инициализацию другого экземпляра ChromeDriver (или с другим кодом), даже если первая инициализация не выполнена?

тлдр;как инициализировать несколько экземпляров одновременно, если инициализация требует времени.

Я ценю любую помощь

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

вы можете использовать Task.Run

var task = Task.Run(() => new ChromeDriver(service, options[i]));

Общий код будет выглядеть так:

var taskList = new List<Task>(20);
for (int i = 0; i < 20; i++)
{
   var task = new ChromeDriver(service, options[i]);
   taskList.Add(task);
}

//at the and wait all tasks to finish.
await Task.WaitAll(taskList.ToArray()); 
0 голосов
/ 20 декабря 2018

Вы можете запускать несколько потоков в C #, что означает, что вы можете запускать свой код параллельно, не дожидаясь завершения одного метода для запуска другого.

Рекомендуемый способ сделать это - использовать методы изSystem.Threading.Tasks пространство имен, прежде всего Task.Run.

Хотя в вашем случае я бы порекомендовал подумать о параллели для:

Parallel.For(0, 20, i =>
    {
       driver[i] = new ChromeDriver(service, options[i]);
    });
...