通常,我会执行以下操作
public static async Task dosth()
{
List<Task> job = new List<Task>();
for (int i = 0; i < 3; i++)
{
job.Add(sleep());
}
Task.WhenAll(job.ToArray());
}
static async Task sleep()
{
await Task.Delay(1000);
Console.WriteLine("Finish new");
}
它工作顺利,没有问题。但是当我对自己的代码进行审查时(尝试使用其他语法来完成相同的工作),我突然发现以下两个是不同的。
public static async Task dosthA()
{
//This will be working synchronously, take 3 seconds.
await sleep();
await sleep();
await sleep();
//This will be working asynchronously, take 1 second only.
Task A = sleep();
Task B = sleep();
Task C = sleep();
await A;
await B;
await C;
}
为什么将异步函数分配给新变量会有所不同?我原本认为它们是一样的。
更新
为什么让我感到困惑的是,实际上在Async-await 的 Microsoft 文档中,他们在代码中声明了以下内容。
// Calls to TaskOfTResult_MethodAsync
Task<int> returnedTaskTResult = TaskOfTResult_MethodAsync();
int intResult = await returnedTaskTResult;
// or, in a single statement
int intResult = await TaskOfTResult_MethodAsync();
他们实际上是不同的,为什么他们使用//or , in a single statement,仅仅因为它在他们自己的例子中没有什么不同?
函数式编程
相关分类