await
를 사용
found this way를 갖는
, 나는 Argotic RSS 리더 라이브러리를 사용했습니다 :비동기 TaskCompletionSource 호출하는 방법은 두 번
var tcs = new TaskCompletionSource<string>();
EventHandler<SyndicationResourceLoadedEventArgs> feedReaderOnLoaded = null;
feedReaderOnLoaded = (sender, args) =>
{
feedReader.Loaded -= feedReaderOnLoaded;
tcs.SetResult(""); // Needed so the await completes
};
feedReader.Loaded += feedReaderOnLoaded;
feedReader.LoadAsync(new Uri(feed.Url), new object());
await tcs.Task;
// Result is put in a property, rather than returned from the method
var items = feedReader.Channel.Items;
그래서 잘 작동, 내가 얻을 내 항목.
피들러에서 RSS 피드의 URL에 두 건의 호출이 있음을 알았습니다. 디버거에서 코드를 단계별로 실행하면 LoadAsync
에서 한 번 호출되고 await tcs.Task
에서 다시 호출됩니다. 통화 중 하나를 제거하려면 어떻게해야합니까?
업데이트downloaded from here이 동작을 설명하는 콘솔 앱 프로젝트가 있습니다.
UPDATE 나는 내가 Argotic 라이브러리를 사용하는 방법 내가 HttpClient
를 사용하여 RSS 피드를 다운로드 할 수 있도록 변경하고 이제 하나의 호출을 생성하는 문자열로 Argotic에 내용을 전달했습니다. 누구에게 아이디어가 있다면 왜 두 번 부름을 받았는지 아직도 알고 싶습니다.
* 디버거를 전혀 사용하지 않으면 같은 효과가 나타 납니까? –
그리고 비동기를 전혀 사용하지 않는다면? 예를 들어 독자가 단순히 두 번 전화를 자연스럽게 (예 : HEAD, GET) 호출 할 수 있습니까? –
예, 동일한 효과가 있으며 둘 다 GET입니다. 동기화 버전으로 되돌아 가서 다시 댓글을 달아 드리겠습니다. – harriyott