gpt4 book ai didi

c# - 声明任务属性并等待它

转载 作者:行者123 更新时间:2023-11-30 14:07:09 25 4
gpt4 key购买 nike

我被困在一些我认为很简单的事情上,以至于它让我失去了 self 。

我需要在某个时候声明一个Task,然后再运行,我想到了:

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 意思是“等待这个任务完成,然后做剩下的事情”。您的示例中的任务未启动。 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;
}

关于c# - 声明任务属性并等待它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43096666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com