我创建了下面的控制台应用程序,但它似乎是同步运行而不是异步运行,这让我感到有些困惑:
class Program
{
static void Main(string[] args)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
var total = CreateMultipleTasks();
stopwatch.Stop();
Console.WriteLine("Total jobs done: {0} ms", total.Result);
Console.WriteLine("Jobs done in: {0} ms", stopwatch.ElapsedMilliseconds);
}
static async Task<int> CreateMultipleTasks()
{
var task1 = WaitForMeAsync(5000);
var task2 = WaitForMeAsync(3000);
var task3 = WaitForMeAsync(4000);
var val1 = await task1;
var val2 = await task2;
var val3 = await task3;
return val1 + val2 + val3;
}
static Task<int> WaitForMeAsync(int ms)
{
Thread.Sleep(ms);
return Task.FromResult(ms);
}
}
运行应用程序时,输出结果如下:
我本来期望的是:总工作时间:12000毫秒
工作完成时间:12003毫秒
这是因为当我使用Thread.Sleep方法时,它停止了整个应用程序的进一步执行吗?或者我忽略了什么重要的东西吗?总工作时间:12000毫秒
工作完成时间:5003毫秒
Thread.Sleep
到其他异步操作,例如WebClient.DownloadStringTaskAsync()
。同时等待所有线程,而不是一个接一个地等待。async
并非多任务。 - flindeberg