PowerShell中Task<T>类型调用阻塞行为的技术问询
PowerShell中Task类型的自动等待行为疑问
我发现当在PowerShell中显示System.Threading.Tasks.Task<T>类型时,无论是否调用Task.GetAwaiter().GetResult(),PowerShell总会等待任务完成。想确认该行为是否有官方文档记录?
我在DLL中定义了以下方法:
public static class MyClass { public static async Task AsyncSleep() => await Task.Run(() => System.Threading.Thread.Sleep(2000)); public static Task NonAsyncSleep() => Task.Run(() => System.Threading.Thread.Sleep(2000)); public static Task<string> NonAsyncSleepStr() => Task.Run(() => { System.Threading.Thread.Sleep(2000); return "asd"; }); }
在PowerShell会话中调用时,出现以下现象:
[MyClass]::AsyncSleep()无论是否追加.GetAwaiter().GetResult()都会阻塞。[MyClass]::NonAsyncSleep()仅在追加.GetAwaiter().GetResult()时才会阻塞。[MyClass]::NonAsyncSleepStr()无论是否追加.GetAwaiter().GetResult()都会阻塞。
我原本预期未调用.GetAwaiter().GetResult()时三个方法均为非阻塞(即立即返回)。由于AsyncSleep和NonAsyncSleepStr在PowerShell中返回Task1类型,NonAsyncSleep返回Task`类型,是否可认为PowerShell对带返回结果的Task类型总会等待?这是否是PowerShell的特性(类似数组展开的特性)?
内容的提问来源于stack exchange,提问作者Carl Chang
相关产品推荐
相关产品推荐

