我在这里进一步了解异步操作:http://msdn.microsoft.com/en-us/library/hh873173(v=vs.110).aspx
浏览以下示例:
Task<bool> [] recommendations = …;
while(recommendations.Count > 0)
{
Task<bool> recommendation = await Task.WhenAny(recommendations);
try
{
if (await recommendation) BuyStock(symbol);
break;
}
catch(WebException exc)
{
recommendations.Remove(recommendation);
}
}
我在想,如果我已经在Task.WhenAny
上执行了await
,为什么还需要在try块内再次使用await
?
如果我已经这样做了:Task<bool> recommendation = await Task.WhenAny(recommendations);
为什么要这样做:if (await recommendation) BuyStock(symbol);
Task
由于WebException
而出现故障,那么会抛出AggregateException
而不是WebException
。 - Servyawait
?”问题的一部分。我也进行了澄清。 - i3arnonawait
?”答案总是解释了原因。 - i3arnonawait
的整个重点是它不仅仅获取结果。它使用一组特定的错误处理语义来获取结果,这对于方法的功能至关重要。以这样的方式破坏代码,使其无法工作,但以微妙且难以调试的方式无法工作,这几乎是一个毫无用处的答案。此时,您回答中的唯一有用内容基本上是我告诉您需要包含在您回答中的内容,而其中大部分内容都是积极有害的。 - Servy