【问题标题】:Call an async method in the immediate window Visual Studio在即时窗口 Visual Studio 中调用异步方法
【发布时间】:2020-03-22 00:02:46
【问题描述】:

我停在了一个断点上,我需要观察在这种情况下使用即时窗口调用异步函数的结果。所以我尝试了

var things = await Client.GetThingsAsync("aParameter");

“await”运算符只能在异步方法中使用。考虑 用 'async' 修饰符标记这个方法并改变它的返回值 键入“任务”。

但是断点已经在异步方法中。我也尝试过运行

var things = Client.GetThingsAsync("aParameter");

“评估需要一个线程临时运行。使用观察窗口 进行评估。”

所以我尝试了 Watch 窗口

ClientGetThingsAsync("aParameter").Result;

“函数求值需要所有线程运行。”

编辑代码和重新构建让我很崩溃,因为每次构建需要 15 分钟。调试时有哪些策略可以调用异步调用?

【问题讨论】:

    标签: visual-studio async-await immediate-window


    【解决方案1】:

    您需要手动执行操作 - 没有 await

    var things = ClientGetThingsAsync("aParameter").Result;
    

    正如编译器所指出的,您需要一个 async 函数来使用 await,但在使用即时窗口时您无法控制该函数。

    【讨论】:

    • "评估需要一个线程临时运行。使用 Watch 窗口执行评估。"
    • 观察窗口(最多可以打开四个:调试时查看调试|窗口菜单)允许您观察任意表达式
    • 我使用 ClientGetThingsAsync("aParameter").Result;我得到“函数评估需要所有线程运行。”
    • @user33276346 我已经看到,使用 F5 运行直到下一个断点有时会有所帮助。否则在你的主应用程序代码中调试(而不是在调试器中),即使丢弃代码。
    • 我在 ASP.NET Core 3.1 项目中的 VS 2019 (16.11.5) 中执行此操作,它使 VS 在我杀死它之前完全冻结并锁定了 5 分钟 - 哇。
    【解决方案2】:

    在监视窗口中,单击消息右侧的小图标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      相关资源
      最近更新 更多