gpt4 book ai didi

c# - DebuggerStepThrough、DebuggerHidden 在异步等待方法中不起作用

转载 作者:可可西里 更新时间:2023-11-01 08:47:52 25 4
gpt4 key购买 nike

当您打开 "Break when an exception is thrown" Visual Studio 调试器中的功能,它会针对选定的异常类型在任何地方中断。告诉它不要中断特定方法的方法是 decorate these methods with DebuggerStepThrough attribute (or DebuggerHidden) .

这,显然,出于某种原因不适用于 async 方法。这是重现该问题的片段。调试器TestAsync 内部中断,即使它标有属性,但它不会Test 内部中断,因为异常(exception)(它们之间的唯一区别是第一个用 async 关键字标记):

public class Attributes
{
public async Task Run()
{
await TestAsync();
await Test();
}

[DebuggerHidden]
[DebuggerStepThrough]
public async Task TestAsync()
{
try
{
throw new Exception("Async");
}
catch
{
}
await Task.Delay(100);
}

[DebuggerHidden]
[DebuggerStepThrough]
public Task Test()
{
try
{
throw new Exception("sync");
}
catch
{
}
return Task.Delay(100);
}
}

那么,这种行为是故意的吗?这是一个错误吗?有解决方法吗?

最佳答案

属性不能很好地与 async/await 配合使用,因为异步方法会在幕后被重写——而属性不会随之而来。参见 https://stackoverflow.com/a/22412597/495262对于类似的情况。

关于c# - DebuggerStepThrough、DebuggerHidden 在异步等待方法中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24433331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com