• PowerShell中异步方法的使用


    问题

    PowerShell脚本中有个文件上传功能,使用HttpClient
    脱敏处理后基本就是这样子

    $client = new-object System.Net.Http.HttpClient;
    $result = $client.PostAsync($URL,@{}).Result;
    

    别问为什么不用await,问就是有原因

    某天程序执行后,$result始终为空,也无异常
    经过艰苦卓绝的排查后发现$URL存在证书问题。

    同样的程序,使用C#写就会抛出异常

    所以,这算是个PowerShell使用.NET的一个坑

    怎么写

    方案一
    $client = new-object System.Net.Http.HttpClient;
    $result = $client.PostAsync($URL,@{}).GetAwaiter().GetResult();
    

    至于Task.Result与Task.GetAwaiter().GetResult(),二者都不推荐使用,但是非要矮子里拔高个,推荐使用后者(刚说了,在PowerShell中,前者压根就不抛出异常)

    方案二
    $client = new-object System.Net.Http.HttpClient;
    $task = $client.PostAsync($URL,@{});
    $result = $task.Result
    if(-not $result)
    {
        throw $task.Exception
    }
    

    Ref

    https://stackoverflow.com/questions/17284517/is-task-result-the-same-as-getawaiter-getresult

  • 相关阅读:
    IDEA快捷的添加包名
    Spring源码(一)
    Java的理解
    剪绳子
    机器人的运动范围
    矩阵中的路径
    N皇后问题
    回溯法
    全排列
    反转链表
  • 原文地址:https://www.cnblogs.com/talentzemin/p/16671106.html
Copyright © 2020-2023  润新知