我想在为任务注册继续操作后启动它。但是,在调用await Task.Delay()
之后,继续操作会立即触发。
using System;
using System.Linq;
using System.Threading.Tasks;
namespace ConsoleApplication30
{
class Program
{
static void Main(string[] args)
{
var task = new Task(async delegate {
Console.WriteLine("Before delay");
await Task.Delay(1000);
Console.WriteLine("After delay");
});
task.ContinueWith(t => {
Console.WriteLine("ContinueWith");
});
task.Start();
Console.ReadLine();
}
}
}
输出:
Before delay
ContinueWith
After delay
这里出了什么问题?
new Task(
->new Task<Task>(
task.ContinueWith
->task.Unwrap().ContinueWith
- user4003407new Task(
。请改用Task.Run(
。 - Scott Chamberlainasync
的工作原理。一旦遇到第一个await
,你的任务就会立即结束,因为内部任务(等待Task.Delay
的任务)和外部任务(你用new Task
明确创建的任务)之间没有连接。正如Scott所说的那样,“不要使用任务构造函数”。代码将使用Task.Run
正常工作(但你实际上也不应该使用它 - 只需运行代码,无需将其提交到另一个线程中并立即返回)。 - Luaan