WCF异步服务或MVC异步控制器线程使用?

时间:2012-06-25 22:40:31

标签: c# asp.net-mvc wcf asynchronous thread-safety

任何人都可以解释何时使用异步控制器而不是异步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控制器?

谢谢!

0 个答案:

没有答案