下面的代码应该(至少在我看来)创建100 Tasks,它们都在并行等待(这是关于并发的点,右边:D?)并且几乎同时完成.我想,每Task.Delay一个Timer对象在内部创建.
public static async Task MainAsync() {
var tasks = new List<Task>();
for (var i = 0; i < 100; i++) {
Func<Task> func = async () => {
await Task.Delay(1000);
Console.WriteLine("Instant");
};
tasks.Add(func());
}
await Task.WhenAll(tasks);
}
public static void Main(string[] args) {
MainAsync().Wait();
}
Run Code Online (Sandbox Code Playgroud)
但!当我在Mono上运行时,我会得到非常奇怪的行为:
Tasks不会在同一时间完成,存在着巨大的延迟(大概在500-600ms)加载程序集:/Users/xxxxx/Programming/xxxxx/xxxxxxxxxx/bin/Release/xxxxx.exe
线程开始:#2
线程开始:#3
线程开始:#4
线程开始:#5
线程开始:#6
线程开始:#7
线程完成:#3 < - 显然延迟1000ms完成了?
线程完成:#2 < - 显然延迟1000ms完成了?
线程开始:#8
线程开始:#9
线程开始:#10
线程开始:#11
线程开始:#12
线程开始:#13
... 你懂了. …