4

我目前正在开发的 WCF 服务中有一个方法,我想在将结果返回给用户后做一些工作。

该服务的用户正在发送我们存储在数据库中的“项目”,然后通过调用其他服务和其他可能需要大量时间(几分钟)的东西来处理。问题是用户真的只需要知道项目的数据库ID。

所以我不希望用户等待所有这些事情都完成。在我这样返回之前启动 System.Threading.Tasks.Task 来执行这样的繁重工作是否是一个合理的解决方案:

int id = InsertIntoDB(item);
Task.Factory.StartNew(() => HeavyProcessing());
return id;
4

2 回答 2

2

当然,这个选项很好。你有什么问题吗?

另一种选择是简单地在客户端进行异步调用,然后服务器实现也可以是同步的,但这取决于您的场景 - 此选项实现起来更简单(无异步),但它可能会使服务器命中一些使用配额(例如最大并发客户端)。

于 2012-09-20T14:10:47.530 回答
2

成功完成这项任务有多重要?IIS 托管的 WCF 服务可能会被 IIS 主动终止,在这种情况下,后台线程可以在执行过程中停止。如果这是一个问题,您最好在消息队列中对操作进行排队,并让 Windows 服务在它可用时接收它。在这种情况下,Windows 服务更加可靠。

于 2012-09-20T14:30:32.567 回答