问题描述
当您打开。
When you turn on the "Break when an exception is thrown" feature in the Visual Studio debugger it breaks everywhere for selected exception types. The way to tell it not to break in a specific method is to decorate these methods with DebuggerStepThrough
attribute (or DebuggerHidden
).
这个显然 ,因为某些原因不适用于 async
方法。
这是一个再现问题的片段。即使标记有属性,调试器将中断 TestAsync
内部 $ c> test as excepted(它们之间的唯一区别是第一个标有 async
关键字):
This, evidently, doesn't work for an async
method for some reason.Here's a snippet that reproduces the issue. The debugger will break inside the TestAsync
even though it's marked with the attributes and it will not break inside Test
as excepted ( the only difference between them is the first is marked with the async
keyword):
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);
}
}
那么这个行为是为了吗?是bug吗有没有解决方法?
So, is this behavior intended? Is it a bug? Is there a workaround?
推荐答案
属性与async / await不兼容,因为异步方法在盖子下重写 - 属性不遵循。有关类似的情况,请参阅。
Attributes don't play well with async/await since async methods get re-written under the covers--and the attributes do not follow. See https://stackoverflow.com/a/22412597/495262 for a similar situation.
这篇关于DebuggerStepThrough,DebuggerHidden不能在async-await方法中工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!