2009-04-20 155 views
1

帮助我是比较新的异步和面向服务的编程,并希望做到以下几点:需要异步操作

  1. 断火中,可能几分钟甚至几小时运行数据库的存储过程。
  2. 将代码返回给客户端可用于跟踪作业进度的作业ID的调用者。

这似乎是一个简单的任务,但是作为新的异步编码,我担心未知的陷阱。这种类型的功能是否有明确定义的模式?如果是这样,它是否有名字,什么是好资源?

回答

0

这个答案在我提出原始问题两年多后才发布,但直到最近我才发现我特别寻找的是什么,当时我遇到了“服务设计模式”一书。

的请求应答模式

http://servicedesignpatterns.com/ClientServiceInteractions/RequestAcknowledge

一个客户想操作一个文件或文件,启动一个业务任务或通知系统有关的有趣的事件。请求不需要立即处理。如果需要回复,则在请求处理完成后不需要交付。

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

enter image description here

-1

查看observer pattern

维基百科:

观察者模式(所述 异步的发布/订阅 图案的子集)是一个设计模式 在其中一个对象,称为 主体,保持的列表中的 家属,被称为观察员,和 自动通知他们任何 状态更改,通常通过调用其方法的一个 。它主要用于实现分布式事件处理 系统的 系统。

有关观察者模式的另一个很好的MSDN文章可以找到here

0

当运行异步调用是很好的自定义设置某种回调来处理过程的结果(我不严格谈论存储过程,可能是任何异步调用的调用) - 这可能是一个结果集或简单成功/失败指标。

如果您考虑周到地使用异步调用来设置某种安全网络来捕捉结果并以适当的方式做出反应,那么我不会看到这种方法的任何缺陷(这种方法在很多情况下实际上是非常必要的)。

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

0

如果你想这样做异步你有2种主要途径:

注册与任何资源使用的是它将调用完成时的回调函数。

如果你的资源可是没有这样的功能,启动跟踪定期的请求完成所有请求和民调线程。每当任务完成时,通过回叫通知拥有者。

0

就你而言,你需要使用回调方法。这将异步执行sql SP执行,并在执行完成时通知您的代码。另外,您可以使用AsynResult对象来轮询操作是否已完成。

回拨方式请参考链接SqlCommand..::.BeginExecuteReader Method (AsyncCallback, Object)

如果您需要轮询也一样,你可以轮询的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); 
} 

请参阅我的回答对What is AsyncCallback?所有不同类型的异步技术以简单的方式解释。