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已经知道没有线程参与。仅仅使用任务并不能使它与线程相链接。我的意思是,链接的答案与这个问题无关。