나는 몇 분마다 RSS 피드를 검색하고 일련의 기준과 일치하는 피드에 항목을 다운로드하는 응용 프로그램을 만들고 있습니다. 그러나 아래 코드를 디버깅하는 데 어려움을 겪고 있습니다. 내 코드에서 중단 점을 설정할 때 GoThroughFeeds()
의 첫 번째 줄을 지나치지 않습니다. 작업을 만들고 처리하는 방식에 문제가 있다고 생각합니다. 처음에는 Task.Run()
을 사용하여 작업을 만들었지 만 두 번 실행됩니다 (대기 후 두 번째 배치). 내가 도대체 뭘 잘못하고있는 겁니까?목록의 모든 항목에 대해 Task.WhenAll을 사용하여 메서드를 실행하고 결과를 저장하는 방법?
private async void RunOnInterval(TimeSpan delay)
{
do
{
await GoThroughFeeds();
await Task.Delay(delay);
} while (true);
}
private async Task GoThroughFeeds()
{
Feed[] updatedFeeds = await Task
.WhenAll(Repository.Data.Feeds.Select(feed => new Task<Feed>(() => FetchRss(feed))));
// Do more stuff with the feeds
}
public Feed FetchRss(Feed feed)
{
feed.Items = Repository.GetItems(feed);
return feed;
}
'새 작업 (() => FetchRss (feed))'틀렸어. 결코 시작되지 않은 작업을 기다리고 있습니다. 나는 왜 당신이'Task.Run'에 문제가 있었는지 이해하지 못합니다. –
''Task (FetchRss (feed) 일하기 시작했다. 'Task.Run()'은 반환 값이 필요하고'Action 만 필요하기 때문에이 시나리오에서는 작동하지 않습니다. 이전에 내 코드에 뭔가 다른 것이 있었기 때문에,'Task'에 정적 메서드 대신'새 작업 '을 사용해야한다고 생각했습니다. 왜냐하면 즉시 실행될 것이라고 생각했기 때문입니다. – Expotr
'Task.FromResult'는 함수를 동 기적으로 실행할 것이므로 원하는 것은 아닙니다. 'Task.Run'을'Func'과 함께 사용할 수 있습니다 : https://msdn.microsoft.com/en-us/library/hh160382(v=vs.110).aspx –