我继承了一个使用异步调用来处理各种事情的Web服务,但是我遇到了一个我无法正确解释的问题。
我(基本上)有以下工作流程。
public CustomObject Work()
{
//synchronous work omitted
ContinueWithMethod1();
return retval;
}
public void ContinueWithMethod1()
{
ContinueWithMethod2().ContinueWith(x=>
{
if(x.IsFaulted) { //log error }
});
}
public Task<CustValue> ContinueWithMethod2()
{
<AzureDocumentDBLibrary>.UpsertDocumentAsync(value, value).ContinueWith(y =>
{
if(y.IsFaulted) throw y.Exception;
//populate CustValue
return retval;
}
);
}
这里的想法是ContinueWithMethod1()
方法内部对Work()
的调用是&#34;火灾和遗忘&#34;以便在调用return retval;
后立即执行ContinueWithMethod1()
语句。如果我在ContinueWithMethod1()
和ContinueWithMethod2()
上设置了断点,那么断点就会如我所料,我也不会在Visual Studio中看到任何错误。问题是我对Azure的调用没有上传任何内容。
其他一些要点:
ContinueWithMethod1()
以匹配下面的代码示例,则第一次传递时一切正常。代码示例如下
public async void ContinueWithMethod1()
{
await ContinueWithMethod2();
}
我认为我在这里遇到的问题是,ContinueWithMethod2()
用户和服务器之间的webrequest连接可能会超时多久。
有没有人遇到嵌套ContineWith()
语句的问题?如果是这样,你可以解释发生了什么,也许如何调试导致我第一次调用Azure丢失的事件序列?