【发布时间】:2017-03-29 14:37:46
【问题描述】:
我被一些我认为很简单的事情困住了,它把我逼疯了。
我需要在某个时候声明一个任务并稍后运行它,我想到了:
Task T1 { get; set; }
public async Task CreateAndAwaitAsync()
{
T1 = new Task(() => {
// time consuming work like:
System.Threading.Thread.Sleep(1000);
}
await T1;
}
当然 lambda 的主体和方法只是为了这个示例(正如我所说的我需要稍后运行它),但无论如何,使用 await T1 我无法进入 lambda !我错过了什么??我觉得自己很愚蠢,因为我已经使用 async-await 范式已经好几年了,我什至没有想到这不起作用!
【问题讨论】:
-
你错过了开始你的任务。
await不会为您启动它。如果您不想启动它 - 只是不要等待它 - 按原样返回(并从方法中删除async关键字)。 -
不要使用
Task构造函数。如果您只是想排队 CPU 密集型工作,请使用T1 = Task.Run(() => .... -
@JSteward 我不能,因为这样任务马上就开始了!我需要在另一个时间和另一个地方开始它,而不是我声明它的时间和地点,它在帖子中指定。
标签: c# .net asynchronous lambda async-await