【发布时间】:2021-10-14 18:33:03
【问题描述】:
我需要执行这样的任务(我无法控制该任务的源代码)
public Task DoSomething()
有时该任务无法完成。而且这种方法不会引发任何异常。在这种情况下,我想再次执行该任务,直到它完成。 为了做到这一点,我尝试这样:
Task task;
do {
task = Task.Run(async () => await DoSomething();
await Task.Delay(300);
}
while (!task.IsCompleted);
正确吗?有没有更好的办法?
【问题讨论】:
-
使用
await运算符。 -
不,这绝对不正确,当前一个任务没有在 300 毫秒内完成时,您开始一个新任务。
-
> “正确吗?” - 没有
-
“尚未完成”和“故障”之间存在巨大差异 - 现在,您可能会同时启动数百个
DoSomething()调用(一个新的每 300 毫秒一次),这听起来像是一种让性能变得越来越差的灾难性方法,以及更长时间运行的操作。DoSomething()这里是什么? -
试试:
await DoSomething();
标签: c# .net asynchronous