2011-06-13 2 views
1

VB.NET에서 새 스레드를 시작하려고하는데 구문 문제가 있습니다.Task.Factory.StartNew의 올바른 구문은 무엇입니까?

는 C#에서 이것은 우리가 사용하는 동일한 작업을 할 수있는 방법은 다음과 같습니다

var manualResetEvent = new ManualResetEvent(false); 
waitHandles.Add(manualResetEvent); 
var taskOne = Task.Factory.StartNew(() => new Thread(TaskToRun).Start(manualResetEvent)); 
taskOne.Wait(); 

TaskToRun은 단일 개체 매개 변수를 사용하여 무효 방법이다.

Dim manualResetEvent = New ManualResetEvent(False) 
waitHandles.Add(manualResetEvent) 
Dim taskOne = Task.Factory.StartNew(Function() New Thread(AddressOf TaskToRun).Start(manualResetEvent)) 
taskOne.Wait() 
+1

왜 스레드를 시작하는 작업을 만들? –

답변

2

스레드를 아무것도하지 않는 작업을 시작하지만 시작 할 이유가 없습니다 :

모든 온라인 컨버터는 이와 유사한 VB.NET 코드를 생성합니다. 작업을 직접 만들어야합니다. 당신은을 통해 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 힌트를 전달하여 수행 할 수 있습니다. 기본 TaskScheduler를 사용하면 전용 스레드 (ThreadPool 대신)에서 작업이 시작됩니다.


참고로, equivelent의 C 번호는 다음과 같습니다

var manualResetEvent = new ManualResetEvent(false); 
waitHandles.Add(manualResetEvent); 
var taskOne = Task.Factory.StartNew(() => TaskToRun(manualResetEvent)); 

taskOne.Wait(); 
+0

목적은 다중 쓰레드를 생성하고 모든 쓰레드가 실행 완료 될 때 알려주는 waithandler리스트를 사용하는 것입니다. var waitTask = Task.Factory.StartNew (WaitAll (waitHandles.ToArray())); waitTask.Wait(); – Sammy

+0

@Sammy : 그렇다면 다중 * 작업 *을 만든 다음 Task.WaitAll (작업)을 호출하면됩니다. 대기 핸들 및 수동으로 생성 된 스레드가 필요 없습니다. –

관련 문제