#vb.net #syntax-error
#vb.net #синтаксическая ошибка
Вопрос:
Я пытаюсь запустить новый поток в VB.NET и у меня проблемы с синтаксисом.
В C # вот как мы можем выполнить ту же задачу, используя:
var manualResetEvent = new ManualResetEvent(false);
waitHandles.Add(manualResetEvent);
var taskOne = Task.Factory.StartNew(() => new Thread(TaskToRun).Start(manualResetEvent));
taskOne.Wait();
TaskToRun
это метод void с единственным параметром объекта.
Все онлайн-конвертеры генерируют VB.NET код, подобный этому:
Dim manualResetEvent = New ManualResetEvent(False)
waitHandles.Add(manualResetEvent)
Dim taskOne = Task.Factory.StartNew(Function() New Thread(AddressOf TaskToRun).Start(manualResetEvent))
taskOne.Wait()
Комментарии:
1. Зачем создавать задачу, которая запускает поток?
Ответ №1:
Нет причин запускать задачу, которая ничего не делает, кроме запуска потока. Вы должны просто создать задачу напрямую. Вы должны быть в состоянии сделать это в VB через:
Dim manualResetEvent = New ManualResetEvent(False)
waitHandles.Add(manualResetEvent)
Dim taskOne = Task.Factory.StartNew(Function() TaskToRun(manualResetEvent))
taskOne.Wait() ' Blocks until task is complete
Если вы хотите заставить задачу использовать выделенный поток, вы можете сделать это, передав подсказку LongRunning. При использовании tasksscheduler по умолчанию задача запускается в выделенном потоке (вместо пула потоков).
Для справки, эквивалентный C # будет:
var manualResetEvent = new ManualResetEvent(false);
waitHandles.Add(manualResetEvent);
var taskOne = Task.Factory.StartNew(() => TaskToRun(manualResetEvent));
taskOne.Wait();
Комментарии:
1. Целью было создать несколько потоков и использовать список waithandler для получения уведомлений, когда все потоки завершат выполнение переменной waitTask = Task. Factory.StartNew(() => Ожидание обработки. WaitAll (ожидание обработки. toArray())); ожидание задачи. Wait();
2. @Sammy: Если это так, просто создайте несколько задач , а затем вызовите Task. WaitAll (задачи). Нет необходимости в дескрипторах ожидания и созданных вручную потоках.