我试图在一个高级脚本中使用任务延迟.NET函数,但当我试图保持安静时,我发现有奇怪的行为.

[system.threading.tasks.task]::Delay(1000*$seconds)

等待$seconds秒,输出如下:

Result                 : System.Threading.Tasks.VoidTaskResult
Id                     : 99
Exception              :
Status                 : RanToCompletion
IsCanceled             : False
IsCompleted            : True
CreationOptions        : None
AsyncState             :
IsFaulted              : False
AsyncWaitHandle        : System.Threading.ManualResetEvent
CompletedSynchronously : False

我不想要那样的yields ,但这些

$null = [system.threading.tasks.task]::Delay(1000*$seconds)
[system.threading.tasks.task]::Delay(1000*$seconds) |out-null
[void]([system.threading.tasks.task]::Delay(1000*$seconds))

立即返回,除非$seconds很大,因此有最小的延迟.为什么会出现这种情况,以及如何修复?

谢谢.

推荐答案

immediate的修复方法是调用.Wait()来等待[System.Threading.Tasks.Task]::Delay()返回的固有的asynchronous任务的完成;因为.Wait()具有返回类型void,所以它不输出任何内容,因此您不需要输出 suppress :

[System.Threading.Tasks.Task]::Delay(1000 * $seconds).Wait()

然而,simpler and more efficient等待synchronously的方式是拨打[System.Threading.Thread]::Sleep():

[System.Threading.Thread]::Sleep(1000 * $seconds)

或者,使用PowerShell的Start-Sleep cmdlet:

Start-Sleep -Seconds $seconds

.net相关问答推荐

条带连接支付—引发异常

跨请求共享数据

在 .NET 7 项目上设置 Sentry 时遇到问题

无法在 Blazor Server 应用程序中触发 InputRadio 的 onchange 事件

保存时不保留 XML 格式

将 Span 传递到函数时出现 F# 错误

在 C# 中生成随机小数

如何获得友好的操作系统版本名称?

在 C# 中将字节数组保存为磁盘上的文件的最有效方法是什么?

实例化具有运行时确定类型的对象

简单委托(委托)与多播委托

为什么字典比列表快得多?

如何在 WPF 中创建/制作圆角按钮?

图像与位图类

操作对事务的状态无效错误和事务范围

如何使用 Android 使用 WCF 服务

List 和 IEnumerable 的实际区别

如何使我的托管 NuGet 包支持 C++/CLI 项目?

在 C#/.NET 中组合路径和文件名的最佳方法是什么?

我应该如何删除 DbSet 中的所有元素?