【发布时间】:2014-03-24 05:58:50
【问题描述】:
我们有一种情况,我们需要在数据服务的 InitializeService 方法中执行一些长时间运行的代码。目前,对数据服务的第一次调用会触发代码,但在长时间运行的代码完成之前不会收到响应。客户端不需要等待此操作完成。我试图使用一个新线程来执行代码,但是随着代码的运行,我们正在替换服务器上的一些文件,这似乎会杀死线程并导致它崩溃。如果我没有在线程中它运行良好,但 InitializeService 方法需要很长时间才能完成。
是否有任何其他方法可以异步运行此代码(在想也许有一种方法可以以与客户端相同的方式调用另一个方法)?
提前致谢。
【问题讨论】:
-
如果 InitializeService 是构造函数的一部分(某处),构造函数在使用线程时有特殊的约束——它不能使用 await 构造生成线程并等待它完成。我们已经完成了长时间运行的初始化过程,方法是在不等待完成的情况下生成它们,并在完成时让线程发出 WaitHandle 等信号,以便依赖于初始化资源(例如文件)的代码在信号量之前不会触发发出信号。
标签: c# asp.net wcf asynchronous odata