如何在C#中创建服务,它将在下面提到的场景中异步执行某些操作?

时间:2015-02-04 18:30:16

标签: c#-4.0 asynchronous asp.net-web-api

我有如下所述的WebApi控制器。此控制器具有Update方法,该方法将在内部调用名为 CustomerDataService 的服务以更新客户记录。假设我们有n个客户记录要更新。

CustomerDataService中的UpdateMethod将执行更新并返回更新响应。

我需要在更新响应之后异步执行一些繁重的处理,例如操作数据/管理数据缓存。由于此处理耗时与此API的使用者无关,因为Update成功发生所以我必须异步执行此操作。 我可以使用给定方案的C#执行此操作吗?请建议。

注意: 我不想创建任何批处理作业来实现这一点,因为我想执行特定于用户会话的操作。

控制器

public class CustomerController : ApiController
{
      [HttpGet]
      public string UpdateCustomer()
      {
            ICustomerService obj = new CustomerDataService();
            return obj.UpdateCustomer(GetCustomerList());           
      }

      private List<CustomerModel> GetCustomerList()
      {
            return new List<CustomerModel>()
            {
                  new CustomerModel
                  {
                        CustomerId="1",
                        Name="John",
                        Category="P1"                    
                    },
                    new CustomerModel
                    {
                        CustomerId="2",
                        Name="Mike",
                        Category="P2"                    
                    }
                    //....n Records
              };
        }
 }

模型

[Serializable]
[DataContract]
public class CustomerModel
{
     [DataMember]
     public string CustomerId { get; set; }
     [DataMember]
     public string Name { get; set; }
     [DataMember]
     public string Category { get; set; }
}

接口和CustomerDataService

public interface ICustomerService
{
    string UpdateCustomer(List<CustomerModel> customerList);
}

public class CustomerDataService : ICustomerService
{
     public string UpdateCustomer(List<CustomerModel> customerList)
     {
          //Do Data Processing - DB Call
          //Return Confirmation Message 
          return "Data Updated Successfully!!!";

          //Needs to perform some processing asynchronously i.e. Call ProcessResults()
     }

     private void ProcessResults()
     {
          //DO Processing
     }
}

1 个答案:

答案 0 :(得分:0)

您正在寻找的是在c#中使用async / await,请参阅微软网站上的这篇文章:Asynchronous Programming with Async and Await。这是另一篇包含大量示例的文章:C# Async, Await

一旦了解了它的工作原理,就可以很容易地更改代码以利用这种模式。如果您有特定问题或遇到问题,请告诉我们。