相关疑难解决方法(0)

Task.Delay是否开始一个新线程?

下面的代码应该(至少在我看来)创建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

... 你懂了. …

c# mono multithreading async-await .net-4.5

10
推荐指数
2
解决办法
4429
查看次数

标签 统计

.net-4.5 ×1

async-await ×1

c# ×1

mono ×1

multithreading ×1