【发布时间】:2018-03-08 00:51:23
【问题描述】:
我有以下示例代码。问题是,Task 表示 IsCompleted,即使它只是 await。
longTask 只有awaits (Task.Delay()) 还没有完成,那为什么IsCompleted 是真的呢? longTask不可能每一个都完成,因为它被while(true)捕获了?!
static async Task Main(string[] args)
{
Task longTask = Task.Factory.StartNew(async () =>
{
while (true)
{
long count = 0;
Console.WriteLine("doing hard work.");
while (count < 99999999)
{
count++;
}
Console.WriteLine("wait for a moment");
await Task.Delay(1000);
Console.WriteLine("I have waited enough");
}
});
while (true)
{
Console.WriteLine($"status: {longTask.IsCompleted}");
await Task.Delay(100);
}
}
【问题讨论】:
-
(不在示例中) 那么我们应该提供什么帮助?在您的示例中,task1 永远不会等待,并且 task2 会立即启动,如您在输出中看到的那样。
-
我已经重写了文本段落。
longTask不可能每个都完成,因为它被while(true)捕获。 -
没有什么等待
longTask,它所做的只是阻塞一个单独的线程。此外,您不应该在此处使用StartNewTask.Run,尤其是当您的实际项目具有任何类型的 UI 上下文时。
标签: c# task task-parallel-library