AFAIK는 모든 시점에서 속성을 통해 노출 을 완료하기 위해 해당 메서드 SetResult
또는 SetException
메서드가 호출 된다는 것을 알고 있습니다.Task<T>
Task
다시 말해, 그것은 a Task<TResult>
와 완성을 위한 생산자 역할을합니다 .
여기 예제를 보았습니다 .
Func를 비동기 적으로 실행할 수있는 방법이 필요하고 해당 작업을 나타내는 작업이있는 경우.
public static Task<T> RunAsync<T>(Func<T> function)
{
if (function == null) throw new ArgumentNullException(“function”);
var tcs = new TaskCompletionSource<T>();
ThreadPool.QueueUserWorkItem(_ =>
{
try
{
T result = function();
tcs.SetResult(result);
}
catch(Exception exc) { tcs.SetException(exc); }
});
return tcs.Task;
}
내가 가지고 있지 않은 경우 어느 *를 사용할 수 Task.Factory.StartNew
-하지만 않습니다 있습니다 Task.Factory.StartNew
.
질문:
누군가가 예에 의해 관련 시나리오 설명해 주시겠습니까 직접 에 TaskCompletionSource
A를하지 가상 내가하지 않아도되는 상황을 Task.Factory.StartNew
?