Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为列表中的每个项目运行Task.whalll方法并存储结果?_C#_Asynchronous_Async Await_Task - Fatal编程技术网

C# 如何为列表中的每个项目运行Task.whalll方法并存储结果?

C# 如何为列表中的每个项目运行Task.whalll方法并存储结果?,c#,asynchronous,async-await,task,C#,Asynchronous,Async Await,Task,我正在开发一个应用程序,它每隔几分钟检索一次RSS提要,并下载提要上与一组标准匹配的项目。然而,我正在努力调试下面的代码。当我在代码中设置断点时,它不会超过GoThroughFeeds()中的第一行。我怀疑我创建和处理任务的方式有问题。最初,我使用Task.Run()创建任务,但它们会运行两次(等待后的第二批)。我做错了什么 private async void RunOnInterval(TimeSpan delay) { do { await GoThroughFeeds()

我正在开发一个应用程序,它每隔几分钟检索一次RSS提要,并下载提要上与一组标准匹配的项目。然而,我正在努力调试下面的代码。当我在代码中设置断点时,它不会超过
GoThroughFeeds()
中的第一行。我怀疑我创建和处理任务的方式有问题。最初,我使用
Task.Run()
创建任务,但它们会运行两次(等待后的第二批)。我做错了什么

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;
}
private async void RunOnInterval(时间跨度延迟)
{
做
{
等待通关();
等待任务。延迟(延迟);
}虽然(正确);
}
私有异步任务GoThroughFeeds()
{
提要[]updatedFeeds=等待任务
.WhenAll(Repository.Data.feed.Select(feed=>newtask(()=>FetchRss(feed)));
//用feed做更多的事情
}
公共提要获取RSS(提要)
{
feed.Items=Repository.GetItems(feed);
回馈;
}
新任务(()=>FetchRss(提要))
错误。您正在尝试等待尚未启动的任务。事实上,几乎不应该使用Task的构造函数

Task.FromResult
也不好,因为它会同步执行代码,而不是将代码卸载到其他线程

最后,
Task.Run
会完全满足您的需要。

新任务(()=>FetchRss(feed))
是错误的。您正在尝试等待尚未启动的任务。事实上,几乎不应该使用Task的构造函数

Task.FromResult
也不好,因为它会同步执行代码,而不是将代码卸载到其他线程


最后,
Task.Run
完全满足您的需要。

新任务(()=>FetchRss(feed))
肯定是错误的。你在等待一个从未开始的任务。我真的不明白你为什么在
任务上遇到麻烦。当我从
新任务(()=>FetchRss(feed))
更改为
任务时,运行
。从结果(FetchRss(feed))
,它开始工作
Task.Run()
在这种情况下不起作用,因为我需要返回值,它只需要执行
操作。之前我的代码可能还有其他问题,这让我相信我需要使用
newtask`而不是
Task
上的静态方法,因为我认为它们会立即运行。
Task.FromResult
将同步执行函数,所以这不是您想要的。您可以使用
任务。使用
函数运行
:您是对的。当我使用Task.Run时,更新速度要快得多。如果你想把它写下来作为答案,我接受。
newtask(()=>FetchRss(feed))
肯定是错误的。你在等待一个从未开始的任务。我真的不明白你为什么在
任务上遇到麻烦。当我从
新任务(()=>FetchRss(feed))
更改为
任务时,运行
。从结果(FetchRss(feed))
,它开始工作
Task.Run()
在这种情况下不起作用,因为我需要返回值,它只需要执行
操作。之前我的代码可能还有其他问题,这让我相信我需要使用
newtask`而不是
Task
上的静态方法,因为我认为它们会立即运行。
Task.FromResult
将同步执行函数,所以这不是您想要的。您可以使用
任务。使用
函数运行
:您是对的。当我使用Task.Run时,更新速度要快得多。如果你想写下来作为回答,我会接受的。