111,094
社区成员




using System;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
test();
Console.WriteLine("按任意键结束........");
Console.ReadKey();
}
private static async void test()
{
var task = Task.Factory.StartNew(async () =>
{
while (true)
{
await Task.Delay(1000);
Console.Write(".");
}
});
await Task.WhenAll(task);
Console.WriteLine("完成");
}
}
}
这个时候 task显然是完成了,因为它只代理委托返回值也就是内部那个 Task,而不监视这个 Task 是否真正完成。
而你使用 Task.Run,它代理的是内部的Task的内部的返回void,是监视真正的过程。using System;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
test();
Console.WriteLine("按任意键结束........");
Console.ReadKey();
}
private static async void test()
{
var task = Task.Run(async () =>
{
while (true)
{
await Task.Delay(1000);
Console.Write(".");
}
});
await Task.WhenAll(task);
}
}
}