gpt4 book ai didi

c# - 在任务中进行异步/等待数据库调用?

转载 作者:行者123 更新时间:2023-11-30 19:05:57 26 4
gpt4 key购买 nike

我们有一个 WCF 服务以下列方式处理传入的消息:

public bool ProcessMessage(string message)
{
var returnValue = GetReturnValue();

Task.Run(() => {
//do some things with the message
UpdateDatabase();
SendRepliesOverNetwork();
});

return returnValue;
}

为了处理尽可能多的消息,我们在此处添加了任务。我们希望尽快将 returnValue 返回给调用者,让 Task 完成它的工作。

我的问题:使用可等待的异步数据库调用和/或使用异步方法通过网络回复是否有任何优势?

我很谨慎,因为我认为这可能会造成过多的上下文切换。我们已经看到该应用在负载下使用 100 多个线程。

最佳答案

首先,我建议您退后一步,真正地问问早点回来是否是个好主意。你所做的通常是危险的;在进行实际处理之前,您要将“OK”返回给客户。如果您的客户知道“returnValue”并不意味着操作已完成并且只有在收到“SendReplies”时才认为操作已完成,这才是一个好主意。

就是说,是的,您应该会看到使一切都尽可能异步的好处。如果您的所有任务都是非阻塞的,您将更好地利用线程池(更少的上下文切换)。

public bool ProcessMessage(string message)
{
var returnValue = GetReturnValue();

Task.Run(async () => {
//do some things with the message
await UpdateDatabaseAsync();
await SendRepliesOverNetworkAsync();
});

return returnValue;
}

关于c# - 在任务中进行异步/等待数据库调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15769189/

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