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