gpt4 book ai didi

multithreading - WCF - 产生一个新的工作线程并返回调用者而不等待它完成

转载 作者:行者123 更新时间:2023-12-03 12:56:35 24 4
gpt4 key购买 nike

我有一个托管在 IIS 中的 WCF Web 服务——这个服务有一个方法——我们称之为 DoSomething()。 DoSomething() 从客户端应用程序调用。

DoSomething 执行一些工作并将答案返回给用户。现在我需要记录调用 DoSomething 的频率。我可以将它添加到 DoSomething 函数,以便每次调用都会写入 sql 数据库并更新计数器,但这会减慢 DoSomething 方法的速度,因为用户需要等待这个额外的数据库调用。

让 DoSomething 方法生成一个新线程来更新数据库中的计数器,然后只将 DoSomething 方法的答案返回给用户,而无需等待线程完成,这是一个不错的选择吗?那么我将不知道数据库更新是否失败,但这并不重要。

生成新的后台线程而不等待它在 WCF 中完成有什么问题吗?或者有没有更好的方法来解决这个问题?

更新:以稍微不同的方式问这个问题。在 wcf Web 服务方法中生成新线程是一个坏主意吗?

最佳答案

主要问题之一是可靠性。这是您关心的电话吗?如果 IIS 进程在您返回响应后崩溃,但在您的线程完成之前崩溃,这有关系吗?如果不是,那么您可以使用客户端 C# 工具。如果确实重要,那么您必须使用可靠的排队技术。

如果您使用客户端,那么生成一个新线程只是为了阻止数据库调用永远不是正确的答案。您想要的是使调用异步,为此您使用 SqlCommand.BeginExecute在您确保 AsyncronousProcessing 之后在连接上启用。

如果您需要可靠的处理,那么您可以使用像 Asynchronous procedure execution 这样的模式。它依赖于持久化队列。

附带说明一下,如果在每个 HTTP 请求上写入数据库的幼稚方法中完成,诸如日志记录或命中计数之类的事情都是一个巨大的性能瓶颈。您必须批处理和冲洗。

关于multithreading - WCF - 产生一个新的工作线程并返回调用者而不等待它完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11097200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com