1
因此,我一直關注着SignalR和ASP.NET Async上的Steven Sanderson的TechDays Talk。我已經與以下操作MVC AsyncController Blocking
public class SomeController : AsyncController
{
static TaskCompletionSource<String> _nextMessage
= new TaskCompletionSource<string>();
[HttpPost]
public ActionResult PostMessage(string message)
{
_nextMessage = new TaskCompletionSource<string>();
oldNextMessage.SetResult(message);
return Content("success");
}
public async void GetMessages()
{
Response.ContentType = "text/event-stream";
while (true)
{
var message = await _nextMessage.Task;
Response.Write("data: " + message + "\n\n");
Response.Flush();
}
}
}
的getMessages似乎被阻塞時,它首先被稱爲碰到一個問題,但一旦超時,它開始按預期工作。
因此,我加載了我的JavaScript,發佈並運行GetMessages。在第一次調用的getMessages,它掛起(預期)在
await _nextMessage.Task;
,但它不會讓我從任何地方(包括瀏覽器的其他實例),以PostMessage的呼叫這是我的開發機器上,所以它可能是一個線程問題,但我認爲這樣做的全部目的是讓線程能夠處理多種事情。而且,除了第一次超時之後,它開始按預期工作,我可以發佈信息並立即獲得響應。但是,如果我刷新頁面,我會遇到同樣的問題。有想法該怎麼解決這個嗎?我使用的是Eventsource,但是當我進行長輪詢時也會出現同樣的問題,例如
public async Task<string> GetNextMessage()
{
return await _nextMessage.Task;
}
與()
嘗試禁用會話狀態。 – SLaks
我如何在MVC4中做到這一點。谷歌正在讓我失望。 – DrSammyD
[SessionState(SessionStateBehavior.Disabled)] – DrSammyD