1

谁能解释何时使用异步控制器与异步 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 控制器?

谢谢!

4

0 回答 0