Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 同时运行任务.NET 4.5_C#_Async Await_Task Parallel Library_Task - Fatal编程技术网

C# 同时运行任务.NET 4.5

C# 同时运行任务.NET 4.5,c#,async-await,task-parallel-library,task,C#,Async Await,Task Parallel Library,Task,为什么方法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); Con

为什么方法
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;
}
公共静态异步void AwakeTest()
{
var Do1=睡眠(1,1);
var Do2=睡眠(1,2);
var Do3=睡眠(1,3);
等待系统.Threading.Tasks.Task.WhenAll(Do1,Do2,Do3);
控制台写入线(等待Do1);
控制台写入线(等待Do2);
控制台写入线(等待Do3);
}
专用静态异步System.Threading.Tasks.Task Sleep(整数秒,整数ID)
{
如果(秒<0)
{
抛出新异常();
}
系统.线程.线程.睡眠(秒*1000);
返回ID;
}

由于
线程。Sleep
睡眠线程,并且每个
任务不需要在单独的线程中运行,因此它会挂起整个线程

您应该使用
Task.Delay

await Task.Delay(Seconds * 1000);

看看这个,哦,我希望
Do1
Do2
Do3
在不同的线程中处理-谢谢!我认为相关问题与此无关。它是关于
TasFactory.StartNew
或其相关方法的。不仅仅是异步方法。@SriramSakthivel:好的,但他是作为任务运行它们,对吗?他调用了
System.Threading.Tasks.Task.whalll
。这并不意味着它也相关。例如,您可以编写
等待Task.whalll(Task.FromResult(1)、Task.FromResult(2),…)。这里OP已经知道没有线程参与。仅仅使用任务并不能使它与线程相链接。我的意思是,链接的答案与这个问题无关。