谁能解释何时使用异步控制器与异步 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();
}
}
与我的 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 服务使用任务,而控制器使用线程。我对线程及其工作原理知之甚少。我只是想知道其中哪一个会更有效并且不会轰炸我的服务器。总体目标是捕获 Web 应用程序中的一些活动并调用控制器或服务(两者都将位于不同的域中),哪种方法更好更好。哪个是真正的异步?他们使用相同的线程吗?任何帮助,提示,技巧,链接等......总是受到赞赏。我的基本问题是异步 WCF 服务还是异步 MVC 控制器?
谢谢!