2013-05-06 2 views
2

완료된 Task 개체를 반환하는 가장 좋은 방법은 무엇입니까?완료된 작업을 반환하는 가장 좋은 방법은 무엇입니까?

Task.Delay(0) 또는 Task.FromResult<bool>(true)을 쓸 수 있습니다.

하지만 가장 효율적인 방법은 무엇입니까? 스티븐 Toub (MSFT)에서

+0

이유는 무엇입니까? 이를 위해 Task가 필요하지 않습니다. 메소드를 호출하면됩니다. – I4V

+3

@ I4V 때로는 작업이 필요하지만 때로는 비동기를 필요로하지 않고 효율적으로 수행 할 수없는 경우가 많습니다. –

답변

4

답변 : 새 작업 때마다 객체하려면

, Task.FromResult 효율적인 가장 입니다. 현재 구현의 Task.Delay (0)은 캐시 된 작업을 반환하지만 구현 세부 사항입니다. 캐시 된 작업 을 사용하려는 경우 캐시 된 작업을 캐시해야합니다. 개인 정적 읽기 전용 작업 s_completedTask = Task.FromResult (true); 그리고 나서 s_completedTask를 사용하십시오.

+0

Andrii, Toub의 진술에 인용 된 링크를 제공 할 수 있습니까? Google은 귀하의 견적에서 검색 문구에 대한 결과를 반환하지 않습니다. –

+0

나는 그에게 직접 물어보고 대답을 게시했습니다. – Andrii

4

Task.FromResult가 가장 직접적입니다. 또한 몇 가지 공통 정수에 대한 inbuilt 결과가 포함됩니다. 그러나 값이 "명백한"값이 아니며 inbuilt 처리는 없지만 시나리오에서 자주 반환 될 가능성이있는 경우 - 자체 생성 할 수 있습니다 캐시 된 결과는 필드에 저장됩니다 (적절하다면 정적 일 수도 있음).하지만 결과 자체가 아니라 작업을 캐시하는 것이 중요합니다. 그렇지 않으면 매번 Task.FromResult를 사용하십시오.

관련 문제