【问题标题】:Backend process后端进程
【发布时间】:2014-05-06 05:47:33
【问题描述】:

我有一个客户,我们为他开发了大约 10 个 Asp.net 站点。每个站点都有自己的订单创建方式。我想要一种通用的方法来处理每个站点中的订单。目前我正在循环所有站点并检查是否有任何订单等待处理(在控制台应用程序中)。这似乎不是一个有效的方法。

例如,一个站点有大约 1000 个订单等待处理,我的工作将等到它们处理完毕,其他站点的订单将等待处理。

我想到了以下事情

  1. 将每个请求保存在单独的线程中并进行限制
  2. 使用 SQL Server 代理调用 Web 服务??

有什么建议可以更好地实现它吗?

我的网站是使用 Asp.Net 网络表单、c#.net 和 SQL Server 2008 开发的

【问题讨论】:

    标签: c# asp.net sql-server sql-server-2008


    【解决方案1】:
       "Async" in a very eaaaaaaaaaaaaasy way, by using my way: Async.cs
    
        Usage>
    
        /* ___________________ Summary ___________________ */
        Async.GetDataAsync<List<double>>(GetSomeDoubles, DoubleArrived);// DoubleArrived takes List<double> as param
    
        Async.DoAsync(doSomethingIns, doNextthingIns); // both are voids
    
    
        /* ___________________ Details ___________________ */
    
        /* ========= GetAsync ========= */
        Async.GetDataAsync<List<int>>(
        () =>
        {
          //Code as you like
          System.Threading.Thread.Sleep(2000);
          return Enumerable.Range(0, 10).ToList();
        },
        (List<int> data) =>
        {
          MessageBox.Show(data.Count.ToString());
        });
    
        /* ========= GetAsync ========= */ 
        Async.GetDataAsync<object>(
        () =>
        {
          //Code as you like
          System.Threading.Thread.Sleep(2000);
          return 5;
        },
        delegate (object data)
        {
          MessageBox.Show(data.ToString());
        });
    
        /* ======== Do some thing Async ======== */
        Async.DoAsync(
        () =>
        {
          //Code as you like
          System.Threading.Thread.Sleep(3000);
        },
        () =>
        {
          MessageBox.Show("You did it async :)");
        });
    
        /* ======== Do some thing Async ======== */
        Async.DoAsync(
        () =>
        {
          //Code as you like
          System.Threading.Thread.Sleep(3000);
        },
        delegate()
        {
          MessageBox.Show("You did it async again :)");
        });
    

    异步类:Async.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Threading;
    using System.ComponentModel;
    
    public class Async
    {
        public class DataByThreadWorker<T>
        {
            private BackgroundWorker bw = null;
    
            public delegate T GetDataDelegate();
            public GetDataDelegate getDataIns;
    
            public delegate void CallCompleted(T data);
            public CallCompleted dataCompletedIns;
    
            public delegate void DoSomething();
            public DoSomething doSomethingIns;
            public DoSomething doNexthingIns;
    
            public void DoAsync()
            {
                if (doSomethingIns != null)
                {
                    bw = new BackgroundWorker();
                    bw.DoWork += bw_DoWorkVoid;
                    bw.RunWorkerCompleted += bw_RunWorkerVoidCompleted;
                    bw.RunWorkerAsync();
                }
                else
                {
                    throw new Exception("Ooops, doSomethingIns should not be null !!!");
                }
            }
    
            public void GetDataAsync()
            {
                if (getDataIns != null)
                {
                    bw = new BackgroundWorker();
                    bw.DoWork += bw_DoWork;
                    bw.RunWorkerCompleted += bw_RunWorkerCompleted;
                    bw.RunWorkerAsync();
                }
                else
                {
                    throw new Exception("Ooops, getDataIns should not be null !!!");
                }
            }
    
            /*===========================================================================*/
    
            void bw_DoWork(object sender, DoWorkEventArgs e)
            {
                if (getDataIns != null) e.Result = getDataIns();
            }
    
            void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                if (dataCompletedIns != null) dataCompletedIns((T)e.Result);
            }
    
            /*===========================================================================*/
    
            void bw_DoWorkVoid(object sender, DoWorkEventArgs e)
            {
                if (doSomethingIns != null) doSomethingIns(); 
                e.Result = true;
            }
    
            void bw_RunWorkerVoidCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                if (doNexthingIns != null) doNexthingIns();
            }
        }
    
        /*======================================================================================================================================================*/
    
        public static void GetDataAsync<T>(DataByThreadWorker<T>.GetDataDelegate GetDataFunc, DataByThreadWorker<T>.CallCompleted DataCompletedDelegate)
        {
            DataByThreadWorker<T> dt = new DataByThreadWorker<T>();
            dt.getDataIns = GetDataFunc;
            dt.dataCompletedIns = DataCompletedDelegate;
            dt.GetDataAsync();
        }
    
        public static void DoAsync(DataByThreadWorker<object>.DoSomething doSomethingIns, DataByThreadWorker<object>.DoSomething doNextthingIns)
        {
            DataByThreadWorker<object> dt = new DataByThreadWorker<object>();
            dt.doSomethingIns = doSomethingIns;
            dt.doNexthingIns = doNextthingIns;
            dt.DoAsync();
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多