任何人都可以解释何时使用异步控制器而不是异步wcf服务?在线程使用等? 我的异步控制器看起来像这样
public class EventController : AsyncController
{
[HttpPost]
public void RecordAsync(EventData eventData)
{
AsyncManager.OutstandingOperations.Increment();
Debug.WriteLine(string.Empty);
Debug.WriteLine("****** Writing to database -- n:{0} l:{1} ******", eventData.Name, eventData.Location);
new Thread(() =>
{
AsyncManager.Parameters["eventData"] = eventData;
AsyncManager.OutstandingOperations.Decrement();
}).Start();
}
public ActionResult RecordCompleted(EventData eventData)
{
Debug.WriteLine("****** Complete -- n:{0} l:{1} ******", eventData.Name, eventData.Location);
Debug.WriteLine(string.Empty);
return new EmptyResult();
}
}
vs我的WCF服务
[ServiceBehavior(Namespace = ServiceConstants.Namespace)]
public class EventCaptureService: IEventCaptureService
{
public EventCaptureInfo EventCaptureInfo { get; set; }
public IAsyncResult BeginAddEventInfo(EventCaptureInfo eventInfo, AsyncCallback wcfCallback, object asyncState)
{
this.EventCaptureInfo = eventInfo;
var task = Task.Factory.StartNew(this.PersistEventInfo, asyncState);
return task.ContinueWith(res => wcfCallback(task));
}
public void EndAddEventInfo(IAsyncResult result)
{
Debug.WriteLine("Task Completed");
}
private void PersistEventInfo(object state)
{
Debug.WriteLine("Foo:{0}", new object[]{ EventCaptureInfo.Foo});
}
}
请注意,WCF服务使用Task,而Controller使用Thread。我对线程及其工作原理知之甚少。我只是想知道哪些更有效,而不是轰炸我的服务器。总体目标是捕获Web应用程序中的某些活动并调用控制器或服务(其中任何一个将位于不同的域),哪种更好的方法更好。哪个是真正的异步?他们使用相同的线程吗?任何帮助,提示,技巧,链接等......总是受到赞赏。我的基本问题是异步WCF服务或异步MVC控制器?
谢谢!