TaskCompletionSource<>
의 내부 동작에 대해 나에게 불분명 한 것이 있습니다.TaskCompletionSource를 사용하는 TaskCreationOptions의 목적은 무엇입니까?
Factory
을 사용하여 간단한 Task<>
을 만들 때 TaskCreationOptions.LongRunning
을 지정하지 않으면이 작업이 새 스레드에서 실행되는 대신 스레드 풀에 대기열에 포함될 것으로 예상됩니다.
내 이해는 TaskCompletionSource
입니다. 작업이 끝나거나 실패 할 때 트리거 할 책임이 있으며 스레드 관리 방법을 완전히 제어 할 수 있습니다. 그러나 TaskCompletionSource
의 ctor를 사용하면 TaskCreationOptions
을 지정할 수 있으며, 이는 Scheduler
이 작업 자체를 처리 할 수 없다는 것을 예상했기 때문에 혼란 스럽습니다.
TaskCompletionSource<>
의 문맥에서 TaskCreationOptions
의 목적은 무엇입니까? TaskCompletionSource 다른 작업의 자식이 될 수
public Task<WebResponse> Download(string url)
{
TaskCompletionSource<WebResponse> tcs =
new TaskCompletionSource<WebResponse>(TaskCreationOptions.LongRunning);
var client = (HttpWebRequest)HttpWebRequest.Create(url);
var async = client.BeginGetResponse(o =>
{
try
{
WebResponse resp = client.EndGetResponse(o);
tcs.SetResult(resp);
}
catch (Exception ex)
{
tcs.SetException(ex);
}
}, null);
return tcs.Task;
}
결과 작업을 통해 사용 된 것을 볼 수 있습니다. 따라서 일부 코드가 TCS 또는 작업을 전달할 수 있고 결과에 따라 작업을 수행 할 수 있습니다 이러한 옵션 중 하나 (이 작업을 처리하는 사용자 지정 코드) 중 하나를 선택합니다. – Servy