【问题标题】:Running Tasks simultaneously .NET 4.5同时运行任务.NET 4.5
【发布时间】:2015-06-21 05:26:59
【问题描述】:

为什么 AwakeTest 方法需要 3 秒而不是 1 秒

public static async void AwakeTest()
{
    var Do1 = Sleep(1, 1);
    var Do2 = Sleep(1, 2);
    var Do3 = Sleep(1, 3);

    await System.Threading.Tasks.Task.WhenAll(Do1, Do2, Do3); 

    Console.WriteLine(await Do1);
    Console.WriteLine(await Do2);
    Console.WriteLine(await Do3);
}

private static async System.Threading.Tasks.Task<int> Sleep(int Seconds, int ID)
{
    if (Seconds < 0)
    {
        throw new Exception();
    }
    System.Threading.Thread.Sleep(Seconds * 1000);
    return ID;
}

【问题讨论】:

标签: c# async-await task-parallel-library task


【解决方案1】:

由于Thread.Sleep 使线程休眠,并且每个Task 不需要在单独的线程中运行,它会挂起整个线程。

您应该改用Task.Delay

await Task.Delay(Seconds * 1000);

【讨论】:

  • d'oh 我希望 Do1Do2Do3 在单独的线程中处理 - 谢谢!
  • 我认为链接的问题在这里无关紧要。它是关于TasFactory.StartNew 或其相关方法。不仅仅是异步方法。
  • @SriramSakthivel:好的,但他将它们作为任务运行,对吧?他打电话给System.Threading.Tasks.Task.WhenAll
  • 这也不相关。例如你可以写await Task.WhenAll(Task.FromResult(1), Task.FromResult(2), ...); 。这里 OP 已经知道不涉及线程。仅仅使用任务并不能使其与 Thread 链接。恕我直言,链接的答案与这个问题无关。
猜你喜欢
  • 1970-01-01
  • 2013-10-06
  • 2011-01-19
  • 2015-10-19
  • 1970-01-01
  • 2012-09-07
  • 2012-09-02
相关资源
最近更新 更多