2011-03-21 5 views
4

현재 .net 작업을 사용하여 긴 메서드를 실행하려고합니다. 작업에서 데이터를 반환 할 수 있어야합니다. 이 메서드를 새 작업으로 실행할 때마다 여러 번 호출하고 싶습니다. 그러나 Task.Result 속성을 사용하여 데이터를 반환하면 각 작업이 완료 될 때까지 대기합니다.스레딩 작업에서 데이터를 반환하는 방법

는 다음과 같이 할 현재 예를 들어 :

public void RunTask() 
{ 
    var task = Task.Factory.StartNew(() => 
    { 
     return LongMethod() 
    }); 

    Console.WriteLine(task.Result); 
} 

과 전화를 여러 번, 시간의 다른 양을 복용 할 때마다, 각 작업에 대한 대기가 다음을 실행하기 전에 완료하는 것입니다.

각 작업이 순서대로 완료 될 때까지 기다리지 않고 결과를 반환 할 때마다 RunTask 메서드를 여러 번 호출 할 수 있습니까?

답변

5

예. Task<T>에서 으로 전화하면 결과가 발생할 때까지 차단됩니다. 완전히 비동기이를 확인하려면

, 당신은 발신자의 수준에서 직접 Task<T>을 반환하는 방법, 그리고 "블록"을 변경하거나 계속 사용할 수 있습니다 중 하나

public void RunTask() 
{ 
    var task = Task.Factory.StartNew(() => 
    { 
     return LongMethod() 
    }); 

    // This task will run after the first has completed... 
    task.ContinueWith(t => 
     { 
      Console.WriteLine(t.Result); 
     }); 
} 
+0

아 내가 계속 이해를 지금. 그것은 내가 필요한 것을 성취합니다. 감사. – Web

관련 문제