Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous 需要异步操作的帮助吗_Asynchronous_Design Patterns - Fatal编程技术网

Asynchronous 需要异步操作的帮助吗

Asynchronous 需要异步操作的帮助吗,asynchronous,design-patterns,Asynchronous,Design Patterns,我对异步和面向服务编程比较陌生,希望做以下工作: 启动数据库中可能运行数分钟甚至数小时的存储过程 向作业id的调用方返回代码,客户端可以使用该代码跟踪作业的进度 这似乎是一项简单的任务,但由于不熟悉异步编码,我担心未知的陷阱。这类功能是否有定义良好的模式?如果有,它有名字吗?什么是好资源?请查看 来自维基百科: 观察者模式(观察者模式的子集) 异步发布/订阅 模式)是一种软件设计模式 其中一个对象称为 主题,维护其 家属,称为观察员,以及 自动通知他们任何 状态更改,通常通过调用 他们的方法。它

我对异步和面向服务编程比较陌生,希望做以下工作:

  • 启动数据库中可能运行数分钟甚至数小时的存储过程
  • 向作业id的调用方返回代码,客户端可以使用该代码跟踪作业的进度
  • 这似乎是一项简单的任务,但由于不熟悉异步编码,我担心未知的陷阱。这类功能是否有定义良好的模式?如果有,它有名字吗?什么是好资源?

    请查看

    来自维基百科:

    观察者模式(观察者模式的子集) 异步发布/订阅 模式)是一种软件设计模式 其中一个对象称为 主题,维护其 家属,称为观察员,以及 自动通知他们任何 状态更改,通常通过调用 他们的方法。它主要用于 实现分布式事件处理 系统


    可以找到另一篇关于观察者模式的好MSDN文章。

    当运行异步调用时,设置某种回调来处理过程的结果是一种很好的习惯(我不是严格地说存储过程,可以是任何异步调用)-可能是结果集,也可能只是成功/失败指标

    如果您充分利用异步调用,设置某种安全网来捕获结果并以适当的方式作出反应,我看不出这种方法有任何缺陷(事实上,这种方法在许多情况下通常是必要的)


    有关对存储过程的异步调用的实际示例(.NET)(这似乎与您的具体情况有关),请看一看

    如果要异步执行,有两种主要方法:

    使用您正在使用的任何资源注册回调函数,该函数在完成时将调用


    如果您的资源没有这样的功能,请启动一个线程,跟踪所有请求并定期轮询请求完成情况。每次任务完成时,通过回调通知所有者。

    在您的情况下,您需要使用回调方法。这将异步启动sql SP执行,并在执行完成时通知您的代码。此外,您还可以使用AsynResult对象轮询操作是否已完成

    请参阅回调方法的链接

    如果您也需要轮询,可以在IAsyncResult上进行轮询:

    // Make the asynchronous call
    IAsyncResult result = command.BeginExecuteReader(callback, command);
    
    // Poll to see if complete
    while (!result.IsCompleted)
    {    
    // Do more work here if the call isn't complete    
    Thread.Sleep(100);
    }
    

    请参阅我在上的答案,了解以简单方式解释的所有不同类型的异步技术。

    这个答案是在我提出原始问题2年多之后得出的,但直到最近,当我看到《服务设计模式》一书时,我才找到我特别想要的

    请求确认模式

    客户机希望操作文件或文档、启动业务任务或向系统通知感兴趣的事件。请求不需要立即处理。如果需要响应,则不需要在处理请求后立即交付响应

    当服务接收到请求时,将其转发到后台进程,然后返回包含唯一请求标识符的确认