[英]calling WCF method asynchronously
我正在寻找有关以下代码的反馈。 我在这里读到我应该避免使用异步void。
因此,我在方法中实现了以下内容。
foreach (var sample in returns)
{
_logger.Debug("Calling async method");
var resultFromMethodCall = CallMethodAsync(uploadReturn);
_logger.Debug("Continuing....");
}
async Task<Tuple<bool,long>> CallMethodAsync(Sample sampleReturn)
{
try
{
Service1Client client = new Service1Client();
Tuple<bool, long> results = await client.ValidateSampleReturnAsync(sampleReturn);
_logger.Debug("call to Sample Return validator completed for sample: {0}", results.Item2);
return results;
}
catch (Exception ex)
{
_logger.Error(ex, "Error occured while calling WCF service");
return new Tuple<bool, long>(false, sampleReturn.Id);
}
}
当我对返回的变量resultFromMethodCall不执行任何操作时,日志记录表明一切都按我的预期进行。 但是,当我从变量resultFromMethodCall中注销项目时,它现在正在同步运行,因为它等待从调用返回对象。
我在这里错过明显的东西吗? 还是我完全误解了它是如何工作的。
CallMethodAsync
是正确的。
如果您不等待(或等待),则resultFromMethodCall
执行将在该任务仍在运行时继续进行。 是否允许这样做取决于您要发生的事情。
但是,当我从变量resultFromMethodCall中注销项目时,它现在正在同步运行,因为它等待从调用返回对象。
如果您使用resultFromMethodCall.Result
来获取项目,那么可以,它正在阻塞并同步运行。
如果您正在使用await resultFromMethodCall
来获取项目,则不会,它不会同步运行。 但是,它按顺序运行-这意味着该方法将在await
时“暂停”,并且仅在resultFromMethodCall
任务完成时才继续。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.