C# 能否向隐式异步void方法添加属性?

C# 能否向隐式异步void方法添加属性?,c#,asynchronous,C#,Asynchronous,因为async void方法可能很危险,我用属性[AsyncVoid]标记它们,并且在启动应用程序时,我使用反射检查所有async void方法是否都具有此属性,所以我没有遗漏一个,因为它们很难找到。例如,这是一个隐藏的隐式异步void方法: backgroundWorker.DoWork += async (sender, args) => await HandleFrames() 是否有方法将[AsyncVoid]属性添加到此隐藏的异步void方法?例如: backgroundWor

因为
async void
方法可能很危险,我用属性
[AsyncVoid]
标记它们,并且在启动应用程序时,我使用反射检查所有
async void
方法是否都具有此属性,所以我没有遗漏一个,因为它们很难找到。例如,这是一个隐藏的隐式
异步void
方法:

backgroundWorker.DoWork += async (sender, args) => await HandleFrames()
是否有方法将
[AsyncVoid]
属性添加到此隐藏的
异步void
方法?例如:

backgroundWorker.DoWork += [AsyncVoid] async (sender, args) => await HandleFrames()

可惜没有。根据C#5.0规范(§17.2,第417页):

可以在全局范围内指定属性(以指定 包含组件或模块)和类型声明(§9.6), 类成员声明(§10.1.5),接口成员声明 (§13.2)、结构成员声明(§11.2)、枚举成员声明 (§14.3)、访问者声明(§10.7.2)、事件访问者声明 (§10.8.1)和正式参数清单(§10.6.1)


因此,无法为匿名方法(或类)定义属性。

为什么?这有什么作用?与其使用隐式事件处理程序,不如显式定义一个事件处理程序(例如
void framehandlersync(object sender,dowworkeventargs e)
,并用
[AsyncVoid]
attirbute来修饰它。为什么“在启动应用程序时”这样做不是在单元测试中,而是出于兴趣?@JonSkeet:你说得对,我将把它移到单元测试中。为什么不像中那样查找
asynchvoidmethodbuilder
的用法呢?