Asynchronous 需要异步操作的帮助吗
我对异步和面向服务编程比较陌生,希望做以下工作:Asynchronous 需要异步操作的帮助吗,asynchronous,design-patterns,Asynchronous,Design Patterns,我对异步和面向服务编程比较陌生,希望做以下工作: 启动数据库中可能运行数分钟甚至数小时的存储过程 向作业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年多之后得出的,但直到最近,当我看到《服务设计模式》一书时,我才找到我特别想要的 请求确认模式 客户机希望操作文件或文档、启动业务任务或向系统通知感兴趣的事件。请求不需要立即处理。如果需要响应,则不需要在处理请求后立即交付响应 当服务接收到请求时,将其转发到后台进程,然后返回包含唯一请求标识符的确认