【发布时间】:2013-09-18 04:00:12
【问题描述】:
这是我正在运行的代码:
[TestMethod]
public async Task HelloTest()
{
List<int> hello = new List<int>();
//await Task.WhenAll(Enumerable.Range(0, 2).Select(async x => await Say(hello)));
await Say(hello);
await Say(hello);
}
private static async Task Say(List<int> hello)
{
await Task.Delay(100);
var rep = new Random().Next();
hello.Add(rep);
}
为什么按原样运行此代码会按预期工作并产生两个随机数,但使用注释代码总是会产生两个完全相同的数字?
【问题讨论】:
-
GotANumber是做什么的?我在这里没有看到太多的语义差异 -
@olydis 只返回一个int
-
为什么不向我们展示 GotANumber 实现?
-
除非我遗漏了什么,否则
async的用法在这里只会令人困惑。Say方法是完全同步的,所以当它被等待的时候,它总是会返回一个完成的Task,所以调用的 awaiter 会自己继续同步。所以,如果这是正确的,那么你应该能够在没有async/await的情况下重写问题并遇到同样的问题。 -
保持问题简短只有在它也完整的情况下才有价值。
标签: c# async-await c#-5.0