我试图将一个半大的tiff和一个Gal文件调用/推送到java webservice。 该平台是Visual Studio 2013,C#windows窗体应用程序。
我指的是WSDL文件和#34; The Platform"正在为我生成一个服务引用类。 这一切都非常抽象我,这是一件好事,因为我是这个舞台的相对新手。 我离开了基于生成任务的代码"检查,我得到一个addSample和addSampleAsync方法。
我填充类字段并推送代码。
addSample代码工作正常但阻止了用户界面。
异步代码addSampleAsync也有效,bit速度较慢,并非完全异步。 addSampleAsync在大约一半的处理时间内锁定UI,并且对fncTestUpload的函数调用在同一段时间内不会返回。
//Dimensioned at class level
//private static addSamplePortClient Service = new addSamplePortClient();
//private static addSampleResponse Myresult = new addSampleResponse();
//ThisRequest is the WSDL modeled class object.
//This code works, but is slow, 30 seconds on wifi
ResponseType Myresult = Service.addSample(ThisRequest.Request);
MessageBox.Show(Myresult.Message + Myresult.Code);
//This code locks up the UI for about 15 - 20 seconds then takes another 15 to display the messagebox
fncTestUpload(ThisRequest);
async void fncTestUpload(addSampleRequest SentRequest)
{
Myresult = await Service.addSampleAsync(SentRequest.Request);
MessageBox.Show(Myresult.Response.Message + " - " + Myresult.Response.Code);
}
我将响应对象作为类级别变量,希望在调用fncTestUpload的函数中对它做一些事情,它认为在调用异步函数时它会立即返回。直到15秒后它才会返回。??
我花了几个小时在Google上搜索,并且没有找到任何关于为什么addSampleAsync不像宣传的那样工作的答案。
微软的教程也可以用Dilbert的Elbonian编写。我无法关注他们并且发现他们没有帮助,所以请不要指导我。
答案 0 :(得分:0)
当你在方法中使用'await'关键字时,你会说“好的,你继续工作,我会回到我的来电者,让我知道你什么时候完成” 。
所以15秒的等待时间是服务处理请求所花费的时间,然后调用异步方法生成的状态机,以便在先前等待的方法完成后返回到该方法。这是等待的正常行为。
关于花费15秒的MessageBox,可能是Response属性是延迟加载的,并且实际上是在第一次加载代码/消息时访问这些属性。