Yeni Async yöntemine dönüştürdüğüm denetleyici üzerinde yavaş çalışan bir eylem var. Şimdi, bu şu dizeyi dönmek için ancak herhangi jQuery Ajax aramalar çok daha hızlı yerine tamamlamak için zaman uyumsuz beklemedenMVC 4.5 Async Ajax çağrısı çalışmıyor
System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult]
çalışır.
Burada yanlış olan ne yapıyorum? Bulduğum her örneği takip ettim ve bunun uygulanması roket bilimi değil. Hemen hemen
çok
Ben zaman uyumsuz HTTP değişmez anlıyoruz bu video
http://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2287
Ve bu bağlantıda sıralanan ne uyguladım ama neydi uzun vadede Ajax çağrısı, arka planda çalışmak için beklemek ve daha sonra bitmiş olduğu zaman kullanıcıya geri döndü. Bu daha sonra sunucuyu, onları engellemek yerine ek ajax çağrılarını işlemek için serbest bırakırdı.
Güncelleme: İşte
burada javascript kodufunction doWork(options){
return $.ajax("/getData", {
contentType: 'text/json',
async: true,
success: $.proxy(options.callback, options.scope),
error: function (jqXHR, textStatus, error) {
options.callback.apply(options.scope, [error, textStatus, jqXHR]);
}
});
}
Ve C# benim denetleyicisi eylem
[HttpGet]
[AsyncTimeout(60000)]
public async Task<ActionResult> GetData()
{
RestResponse<Data> response = new RestResponse<Data>();
try
{
Data result = null;
await Task.Factory.StartNew(() =>
{
result = ServerImpl.RetrieveData();
});
response.Value = result;
response.HttpStatusCode = 200;
}
catch (Exception ex)
{
response.HttpStatusCode = 500;
response.Value = null;
}
return Json(response, JsonRequestBehavior.AllowGet);
}
Denetleyici eyleminizde ASP.NET Oturumu mu kullanıyorsunuz? –
@Darin Evet. – Matt
O zaman bu senin problemin. ASP.NET oturumu, aynı oturumdan paralel istekleri gerçekleştirmenize izin vermez. ASP.NET oturumu iş parçacığı güvenli olmadığından, ASP.NET yalnızca aynı oturumdaki sunucuya eşzamanlı erişimi engeller ve sıralı olarak bekleyip çalıştırır. ASP.NET Session, uygulamanızda eyalet ve diğer birçok problemi ortaya çıkarır ve tasarım kokusu verir. Ölçeklenebilir ve durum bilgisi olmayan bir uygulamaya sahip olmak istiyorsanız yapmanız gereken ilk şey kurtulmaktır. –