C#-连续检查过程的最佳方法

时间:2019-04-15 15:39:26

标签: c# netsuite

方案:一个Azure WebJob,它将通过WSDL从NetSuite获取所有供应商记录。

问题:数据集太大。即使服务设置为12分钟超时。它仍然超时,代码失败。

NetSuite具有一个异步进程,该进程基本上可以在服务器上运行任何所需的操作,并且它将返回JobId,该JobId允许您检查服务器上的进程。

我目前所做的是先进行搜索呼叫,以询问所有供应商记录,并将其在服务器上处理。得到JobId后,我编写了一个void Recursion,以将线程睡眠设置为10分钟来检查服务器上的作业是否完成。

 private static bool ChkProcess(VendorsService vendorService, string jobId)
    {
        var isJobDone = false;

        //Recursion 
        void ChkAsyncProgress(bool isFinish)
        {
            if (isFinish) return;

            var chkJobProgress = vendorService.NsCheckProcessStatus(jobId);
            if (chkJobProgress.OperationResult.IsFinish) isJobDone = true;

            Thread.Sleep(TimeSpan.FromMinutes(10));
            ChkAsyncProgress(isJobDone);
        }

        ChkAsyncProgress(false);
        return isJobDone;
    }

可以,但是有更好的方法吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我认为,由于您已经在使用Azure,因此Service BUS可以为此实现一个非常低成本的解决方案(如果不是免费的,则取决于您的工作运行频率)

基本上,这是一个队列,您可以在其中排队消息(消息也可以是具有属性的对象,因此它们也可能包含您的详细说明结果。)

使用服务总线入队。 类型为ServiceBusTrigger的azure函数会自动侦听服务总线上是否有任何新消息到达,并在触发时触发(或者,您可以将消息设置为排队,但仅在以后的某个时间可用)。

因此,在webjob代码中,最后您可以添加代码以使消息入队,以标记该webjob已完成详细说明。

当消息进入队列时,azure函数将立即被注意到,并且您可以检索数据而无需不断轮询以完成工作,因为azure将以可笑的价格为您提供所有这些服务,而无需任何费用你的努力。

此外,这些任务不是基于及时定价的,而是基于执行的,因此,只有在有效地将消息放入队列时,您才需要付费。

他们可以免费执行一定数量的处决,因此您甚至不需要支付任何费用。

Here某些用于此操作的Microsoft代码示例。