我需要从NavigateError
事件调用await
方法,其签名(见下文)我无法更改:
void instance_NavigateError(object pDisp, ref object URL, ref object Frame, ref object StatusCode, ref bool Cancel);
将其标记为async
所以我会这样做:
await myMethod(foo);
给出错误:
错误CS1988异步方法不能有ref或out参数
我该如何解决这个问题?
答案 0 :(得分:1)
使用async / await无法做到这一点。由于异步方法的工作原理,在异步方法中使用ref / out是没有意义的。
您没有指定myMethod
的签名,因此下面的示例假定您需要async方法的返回值。如果您不需要等待方法完成,您可以像普通方法一样调用它:myMethod(foo)
。请注意,myMethod
中引发的任何异常都将被忽略。
解决方法是手动输入.ContinueWith。因为这需要使用lambda(或单独的方法),所以在调用之后你将无法设置ref参数。
private void instance_NavigateError(object pDisp, ref object URL, ref object Frame, ref object StatusCode, ref bool Cancel)
{
myMethod(foo).ContinueWith(t => {
var resultOfMethod = t.Result;
// Do something with resultOfMethod
});
}
您可以通过将参数放在变量中来读取参数
private void instance_NavigateError(object pDisp, ref object URLref, ref object Frame, ref object StatusCode, ref bool Cancel)
{
var URL = URLref;
myMethod(foo).ContinueWith(t => {
var resultOfMethod = t.Result;
// Do something with resultOfMethod and URL
});
}