har*_*ott 9 c# asp.net-web-api
我有一个带有WebAPI控制器的ASP.NET MVC应用程序,以及一个使用这些控制器的控制台应用程序.控制台应用程序从计划任务运行,从远程源获取数据,解析它,并在退出之前将其发布到MVC应用程序.
这适用于几个控制器,但其中一个调用会使控制台应用程序崩溃而不会抛出异常.用于所有控制器的调用者代码:
public async Task<string> Post<T>(string urlRoot, string url, T data)
{
var result = "";
try
{
var httpClient = GetHttpClient(urlRoot);
var response = await httpClient.PostAsJsonAsync(url, data); // Exits here
if (response.IsSuccessStatusCode)
{
result = await response.Content.ReadAsAsync<string>();
}
}
catch (Exception e)
{
Debug.WriteLine(e.ToString());
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
程序退出时会退出await httpClient.PostAsJsonAsync(url, data).使用断点,既没有到达catch块也没有到达if语句.然而,正在进行调用,因为正在使用正确的数据调用Web API控制器.
程序共享T通过API调用传递的相同代码.
从输出窗口:
程序'[9640] ProgramName.vshost.exe:Managed(v4.0.30319)'已退出,代码为0(0x0).
我想知道发布数据的大小是否有问题,但我没有找到任何说明大小限制的文档.
所以我的问题是:
一旦你点击await,控制权就会返回给Post的调用者。
不要在 post 方法中使用await,而是从返回的任务中使用ContinueWith,例如:UI线程上的任务继续或等待返回的任务:http://msdn.microsoft.com/en-gb/library/dd537610.aspx