Sho*_*ver 5 .net c# lambda asynchronous async-await
我被困在一些我认为很简单的事情上,这让我无法自拔。
我需要在某个时候声明一个任务并稍后运行它,我想到了:
Task T1 { get; set; }
public async Task CreateAndAwaitAsync()
{
T1 = new Task(() => {
// time consuming work like:
System.Threading.Thread.Sleep(1000);
}
await T1;
}
Run Code Online (Sandbox Code Playgroud)
当然,lambda 的主体和方法只是为了这个例子(正如我所说的,我需要稍后运行它),但无论如何,await T1我就是无法进入 lambda!我错过了什么??我觉得很愚蠢,因为我已经使用 async-await 范式好几年了,我什至没有想到这行不通!
我认为可以在评论中回答,但最好提供更多信息。
await意思是“等待这个任务完成,然后做剩下的事情”。您示例中的任务未启动。await不会为您启动它,因此整个方法将一直停留在await您开始任务之前。
即使使用您当前的代码,如果您稍后这样做T1.Start()- 它会运行您的 lambda,并在它完成后 - 您返回的任务CreateAndAwaitAsync也将完成。
否则 - 要么在创建任务时立即启动 ( Task.Run) 要么直接返回Task而没有任何 async\await:
public Task CreateAndAwaitAsync()
{
T1 = new Task(() => {
// time consuming work like:
System.Threading.Thread.Sleep(1000);
}
// if you need to start it somewhere, do T1.Start();
return T1;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4303 次 |
| 最近记录: |