C# 对于每个项,我使用wait调用一个方法。我将如何同时执行此操作?
在我的应用程序中,我有以下方法C# 对于每个项,我使用wait调用一个方法。我将如何同时执行此操作?,c#,async-await,webrequest,C#,Async Await,Webrequest,在我的应用程序中,我有以下方法 public async void Method() { bool updated = false; foreach (Feed feed in Feeds) { if (await feed.Update()) { updated = true; // At least one feed was updated } } if (updated)
public async void Method()
{
bool updated = false;
foreach (Feed feed in Feeds)
{
if (await feed.Update())
{
updated = true; // At least one feed was updated
}
}
if (updated)
{
// Do Something
}
}
如您所见,方法Update()
在列表中的每个项目上逐个调用。相反,我想同时调用所有项目,并了解其中一项是否成功
方法Update()
可在类Feed
public async Task<bool> Update()
{
try
{
WebRequest wr = WebRequest.Create(URL);
wr.Timeout = 5000;
using (WebResponse response = await wr.GetResponseAsync())
{
XmlDocument feed = new XmlDocument();
feed.Load(response.GetResponseStream());
// Do Something
return true;
}
}
catch (WebException we)
{
return false;
}
}
公共异步任务更新()
{
尝试
{
WebRequest wr=WebRequest.Create(URL);
wr.超时=5000;
使用(WebResponse-response=await wr.GetResponseAsync())
{
XmlDocument提要=新的XmlDocument();
Load(response.GetResponseStream());
//做点什么
返回true;
}
}
catch(WebException-we)
{
返回false;
}
}
编辑:
到目前为止,我一直在尝试使用带返回值和不带返回值的异步方法来解决这个问题
public async void Update()
{
if (await UpdateFeeds())
{
// Do something
}
}
public async Task<bool> UpdateAllFeeds()
{
// Update all the feeds and return bool
}
公共异步无效更新()
{
if(等待UpdateFeeds())
{
//做点什么
}
}
公共异步任务updatealFeeds()
{
//更新所有提要并返回bool
}
然后我意识到在updatealFeed()
中仍然存在同样的问题。如果我将提要中的Update()
更改为异步void方法,它们可以同时运行,但这样我就不会有回调
我不知道如何运行多个异步方法,并且只在它们全部完成后才进行回调。创建一个
任务的列表,然后使用任务。当所有
List<Task<bool>> tasks = new List<Task<bool>>();
foreach (var feed in feeds)
{
tasks.Add(feed.Update());
}
await Task.WhenAll(tasks);
var updated = (from t in tasks where t.Result select t).Any();
List tasks=newlist();
foreach(变量馈入馈入)
{
tasks.Add(feed.Update());
}
等待任务。何时(任务);
var updated=(从任务中的t开始,其中t.Result选择t).Any();
创建一个任务的列表
,然后使用任务。所有
List<Task<bool>> tasks = new List<Task<bool>>();
foreach (var feed in feeds)
{
tasks.Add(feed.Update());
}
await Task.WhenAll(tasks);
var updated = (from t in tasks where t.Result select t).Any();
List tasks=newlist();
foreach(变量馈入馈入)
{
tasks.Add(feed.Update());
}
等待任务。何时(任务);
var updated=(从任务中的t开始,其中t.Result选择t).Any();
创建一个任务的列表
,然后使用任务。所有
List<Task<bool>> tasks = new List<Task<bool>>();
foreach (var feed in feeds)
{
tasks.Add(feed.Update());
}
await Task.WhenAll(tasks);
var updated = (from t in tasks where t.Result select t).Any();
List tasks=newlist();
foreach(变量馈入馈入)
{
tasks.Add(feed.Update());
}
等待任务。何时(任务);
var updated=(从任务中的t开始,其中t.Result选择t).Any();
创建一个任务的列表
,然后使用任务。所有
List<Task<bool>> tasks = new List<Task<bool>>();
foreach (var feed in feeds)
{
tasks.Add(feed.Update());
}
await Task.WhenAll(tasks);
var updated = (from t in tasks where t.Result select t).Any();
List tasks=newlist();
foreach(变量馈入馈入)
{
tasks.Add(feed.Update());
}
等待任务。何时(任务);
var updated=(从任务中的t开始,其中t.Result选择t).Any();
请不要只要求我们为您解决问题。向我们展示你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。请参阅“”,以获取您真正需要阅读的优秀文章。对此表示抱歉。我仍然在试图从逻辑上找出如何使用带返回和不带返回的异步方法来解决这个问题(wait)值。存储每次调用feed返回的Task
。在列表或数组中更新,并调用wait Task。当所有都在列表中时。方法
几乎肯定不应该是async void
。它应该返回某种类型的任务
。您不应该在问题中编辑答案。问题是你问问题的地方。请不要只要求我们为你解决问题。向我们展示你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。请参阅“”,以获取您真正需要阅读的优秀文章。对此表示抱歉。我仍然在试图从逻辑上找出如何使用带返回和不带返回的异步方法来解决这个问题(wait)值。存储每次调用feed返回的Task
。在列表或数组中更新,并调用wait Task。当所有都在列表中时。方法
几乎肯定不应该是async void
。它应该返回某种类型的任务
。您不应该在问题中编辑答案。问题是你问问题的地方。请不要只要求我们为你解决问题。向我们展示你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。请参阅“”,以获取您真正需要阅读的优秀文章。对此表示抱歉。我仍然在试图从逻辑上找出如何使用带返回和不带返回的异步方法来解决这个问题(wait)值。存储每次调用feed返回的Task
。在列表或数组中更新,并调用wait Task。当所有都在列表中时。方法
几乎肯定不应该是async void
。它应该返回某种类型的任务
。您不应该在问题中编辑答案。问题是你问问题的地方。请不要只要求我们为你解决问题。向我们展示你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。请参阅“”,以获取您真正需要阅读的优秀文章。对此表示抱歉。我仍然在试图从逻辑上找出如何使用带返回和不带返回的异步方法来解决这个问题(wait)值。存储每次调用feed返回的Task
。在列表或数组中更新,并调用wait Task。当所有都在列表中时。方法
几乎肯定不应该是async void
。它应该返回某种类型的任务
。您不应该在问题中编辑答案。问题是你在哪里提问。这似乎是一个奇怪的解决方案。John的解决方案在仍然非同步运行的情况下消除了对额外线程的要求。@DanielKelley好吧,该解决方案甚至不编译,而且如果让它编译,那么它在不等待异步操作的情况下继续运行,因此