【发布时间】:2016-10-26 13:39:25
【问题描述】:
我有一个调用 Web API 服务的 Windows 服务。所有 API 调用都已经过测试并且可以正常工作。
服务会运行一段将数据发送到 API 的特定代码。它应该返回并继续循环。它所做的只是停下来。 JSon 已通过 fiddler 发送到 API,并且工作正常。
这是有问题的代码:-
public async Task<WorkOrderCreationResponseDto> ImportWorkOrders(WorkOrderCreationRequestDto request)
{
try
{
WorkOrderCreationResponseDto resp = await RestClient.PostAsync<WorkOrderCreationRequestDto, WorkOrderCreationResponseDto>(string.Format("{0}/WorkOrders", Resource), request);
return resp;
}
catch (Exception ex)
{
throw ex;
}
}
现在代码进入等待行。此时代码以代码 0 退出。它永远不会返回并且不会在 catch 中捕获任何错误。
任何人都可以解释为什么会发生这种情况,因为我在早上在谷歌上兜圈子试图弄明白这一切之后完全不知所措。
任何能对此有所启发的东西都将不胜感激。
环境是Windows 10周年更新和Visual Studio 2015。我们用c#编码。
谢谢 史蒂夫
针对评论添加
我们在下面的代码中构建了一个数据对象 wo。 _rest 包含 API 的用户凭据。
using (SopImportDataService service = new SopImportDataService(_rest))
{
string jsonString = JsonConvert.SerializeObject(wo);
//WorkOrderCreationResponseDto c = await service.ImportWorkOrders(wo);
await service.ImportWorkOrders(wo);
Console.WriteLine("");
}
【问题讨论】:
-
ImportWorkOrders怎么叫? -
嗨 Glorin,我在问题中添加了另一个代码 sn-p。
-
也许我应该以不同的方式处理它:听起来好像在调用堆栈的某个地方没有等待某些东西,并且一旦您的异步方法产生当前线程,您的程序就会退出。
-
我脑子里很清楚,相信我这可能是一个可怕的地方,如果我从它停止的点向后工作,可能会在某个地方缺少等待呼叫?
-
这是我从描述中的猜测。可能的地方是你的主循环。如果您错过了等待/等待,那么一旦您的异步方法之一产生线程,您的主循环就会启动,就好像您的异步方法已经完成一样。如果这允许您的程序满足其退出条件,那么您很可能会看到程序退出时没有错误但从未完成异步调用。
标签: c# json windows api service