我试图在Global.asax中执行async / await Web API Post,以便在执行Rest-api-post时不阻止应用程序加载。
但是应用程序永远不会启动,并且在不执行异步时,事情会变得更快。我在这里做错了什么?
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
protected void Session_Start(object sender, EventArgs e)
{
var somePostValue = myJsonString();
RunAsync(somePostValue).Wait();
}
private static async Task RunAsync(string postValue)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:56789/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.PostAsJsonAsync("api/MyApi", postValue);
}
}
}
答案 0 :(得分:0)
您希望使用正确的HttpApplication
AddOn*()
回调注册* Async()方法。这可以避免死锁(如果你没有死锁,我会感到惊讶)这里有一个更详细的答案:https://stackoverflow.com/a/42007294/1754346
答案 1 :(得分:-1)
因为看起来你没有对响应做任何事情,而不是等待任务,
RunAsync(somePostValue).Wait();
你可以解雇并忘记它:
Task.Factory.StartNew(() => RunAsync(somePostValue));