我正在我的一个类和我的void RaisePostBackEvent(string eventArgument)System.Web.UI.IPostBackEventHandler
async ... await`语法的实现体系中实现I am calling a method using the
。 E.g。
public void RaisePostBackEvent(string eventArgument)
{
if (eventArgument.Equals("deq1"))
{
Result result = await SaveDataAsync();
OnSaved();
}
}
但是,它会产生错误:
CS4033 - 'await'运算符只能在异步方法中使用
问题:Making interface implementations async描述了一个几乎完全相同的问题,关键区别在于OP实现的界面在他的控制之下,accepted answer要改变void DoSomething()
在Task DoSomething()
的接口上。但是,我无法更改IPostBackEventHandler
,因为它是.NET Framework的一部分。
有关如何以安全的方式解决这个问题的任何建议吗?
答案 0 :(得分:3)
即使未在界面中定义,也可以添加async
修饰符
考虑到RaisePostBackEvent
必须返回无效,因此它将作为"fire and forget"来电。如果这不是问题,只需添加async
修饰符即可签名。
public async void RaisePostBackEvent(string eventArgument)
{
if (eventArgument.Equals("deq1"))
{
Result result = await SaveDataAsync();
OnSaved();
}
}
答案 1 :(得分:1)
如果您的方法实现不是异步,那么您就不能等待"等待"在里面。 即使您实施的接口没有异步,也可以使方法实现异步无效。 你不能让你的方法实现异步任务,因为这会改变不好的返回值。
使方法实现async void的结果是调用者不会在返回之前等待方法完成。 尝试:
public async void RaisePostBackEvent(string eventArgument)
{
if (eventArgument.Equals("deq1"))
{
Result result = await SaveDataAsync();
OnSaved();
}
}