1
我有这样的代码这段代码是否同步,因为我希望它是?
public async 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 await Task.Factory.FromAsync
(webQuery.BeginExecute(null, null)
, asyncResult => webQuery.EndExecute(asyncResult)
);
}
我把它叫做从而
public static void Main()
{
Search().Wait();
}
private static async Task Search()
{
IWebSearcher webSearcher = new WebSearcher();
for (var i = 0; i < 100; i++)
{
IEnumerable<WebResult> task = await webSearcher.SearchAsynch(i.ToString());
var enumerator = task.GetEnumerator();
enumerator.MoveNext();
Console.WriteLine(enumerator.Current.Title);
}
}
我的问题是这样。我希望这100个电话中的每一个都与SearchAsynch
完全无关,因此第10个电话可能会在第9个电话之前返回并打印出结果。这似乎并没有发生在这一刻。我做错了什么?
“SearchAndPrintAsync”方法违反了关注点的分离。它将数据访问和演示混合在一起。 – Servy 2013-04-09 15:42:25
我假设op只给了我们示例代码,所以'Console.WriteLine'在逻辑上代表“做进一步处理”。 – 2013-04-09 15:45:49
顺便说一句,我认为使用'First()'(或'FirstOrDefault()')比调用枚举器更简单。 (但我意识到你只是从问题中复制并修复了它。) – svick 2013-04-09 18:53:36