【发布时间】:2013-04-11 23:46:35
【问题描述】:
我有这个方法
public class WebSearcher : IWebSearcher
{
private static readonly string _rootUri;
private static readonly BingSearchContainer _bingContainer;
private static readonly string _accountKey;
static WebSearcher()
{
_rootUri = ConfigurationSettings.Settings.RootUri;
_bingContainer = new BingSearchContainer(new Uri(_rootUri));
_accountKey = ConfigurationSettings.Settings.AccountKey;
_bingContainer.Credentials = new NetworkCredential(_accountKey, _accountKey);
}
public Task<IEnumerable<WebResult>> SearchAsynch(string query)
{
if (query == null)
{
throw new ArgumentNullException("query cannot be null");
}
DataServiceQuery<WebResult> webQuery =
_bingContainer.Web(query, null, null, null, null, null, null, null);
return Task.Factory.FromAsync(webQuery.BeginExecute(null, null),
asyncResult => webQuery.EndExecute(asyncResult));
}
}
我这样称呼它
public class Client
{
public static void Main()
{
Search();
}
private static async Task Search()
{
var tasks = new Task<IEnumerable<WebResult>>[100];
IWebSearcher webSearcher = new WebSearcher();
for (var i = 0; i < 100; i++)
{
tasks[i] = webSearcher.SearchAsynch(i.ToString());
}
await Task.WhenAll(tasks);
for (var i = 0; i < 100; i++)
{
Console.WriteLine(tasks[i].Result.First().Title);
}
}
}
代码在 WhenAll 行停止执行。
【问题讨论】:
-
这是什么程序?控制台应用程序?您如何等待包含循环的方法完成?换句话说:如果您询问整个程序的行为,您需要向我们展示您的程序。
-
包含循环的方法被标记为异步,它是一个控制台应用程序
-
信息还不够。你能包括你的实际代码吗?这包括您的
Main()方法、调用SearchAsynch()的方法以及介于两者之间的任何方法。 -
@svick 这是所有代码。
标签: c# async-await c#-5.0