내 웹 API 컨트롤러 <strong>MyController에</strong>에서
[HttpPost]
Route("groupmembershipvalidate")]
public IHttpActionResult PostGroupMembershipValidate(ListGroupMembershipUploadInput ListGroupMembershipUploadInput)
{
//perform some tasks
var searchResults = ts.validateDetails(gmvi);
return Ok(searchResults);
}
지금이 validateDetails 서비스 클래스를 실행하는 데 필요한 내 서비스 클래스에 대한 호출이 일부 작업은 병렬 처리되므로 모든 결과가 돌아올 때까지 기다렸다가 다시 돌아올 때까지 기다려야합니다.
var tasks = new Task[]
{
Task.Factory.StartNew(() => gd.validateChapterCodeDetails(_input1)),
Task.Factory.StartNew(() => gd.validateGroupCodeDetails(_input1)),
Task.Factory.StartNew(() => gd.validateMasterIdDetails(_input1))
};
var things = Task.WhenAll(tasks);
//Some tasks
return result;
모든 작업이 결과를 반환 할 때까지 반환되는 결과는 계산되지 않습니다. 그러나 Task.WhenAll (작업)이 눌 렸을 때 즉시 다음 몇 줄로 이동하여 PostGroupMembershipValidate 컨트롤러 메서드로 돌아갑니다.
값을 반환하기 전에 대기하고 모든 값을 가져온 후에 만 반환하는 방법은 무엇입니까?
같은 뭔가를 찾고있다 "* ** 기다려야하는 방법 **까지 ** 모든 ** ** 미리 작업 **의 마무리 *"= >'Task.WaitAll' –
당신의 과제는 어떠한 결과도 반환하지 않았습니다. 당신은 어떤 결과를 기대합니까? 것들은 기다릴 수 있지만 더 이상의 결과 값이없는 간단한 Task 인스턴스입니다. 그래서 질문을 명확히하십시오 –
Task.WhenAll과 Task.WaitAll의 차이점을 알고 있어야합니다. WaitAll은 무효를 반환합니다. 모든 작업이 끝나면 다음 명령문이 실행됩니다. WhenAll은 대기중인 작업을 반환합니다.작업을 기다리지 않는 한 코드는 작업 결과를 기다릴 때까지 계속됩니다. 이것은 당신이 기다리는 한 발신자가 동결하지 않는다는 장점이 있습니다. 단점은 함수를 비동기로 선언해야한다는 것입니다. 이에 대한 Stephen Cleary의 답변 : http://blog.stephencleary.com/2012/02/async-and-await.html –