gpt4 book ai didi

c# - 可以通过使用多线程来改进此代码吗?

转载 作者:行者123 更新时间:2023-12-03 13:21:28 25 4
gpt4 key购买 nike

我有一个简单的Windows服务,每天仅运行一次。它在数据库中执行一些查询,生成适当的html内容(表,div,...),并将其以电子邮件的形式发送给多个收件人。

电子邮件的主体是这样创建的:

private static string GenerateBody()
{
using (var stringWriter = new StringWriter())
using (var htmlWriter = new HtmlTextWriter(stringWriter))
{
htmlWriter.RenderBeginTag("html");
htmlWriter.RenderBeginTag(HtmlTextWriterTag.Head);
htmlWriter.WriteLine("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");
htmlWriter.RenderEndTag();
htmlWriter.RenderBeginTag("body");

htmlWriter.Write(
new StringBuilder()
.Append(OverviewParagraph.GenerateHTMLContent())
.Append(PackageWeightParagraph.GenerateHTMLContent())
.Append(BoxWeightParagraph.GenerateHTMLContent())
.Append(CodeQualityParagraph.GenerateHTMLContent())
.Append(ChecksParagraph.GenerateHTMLContent())
.ToString()
);

htmlWriter.RenderEndTag();
htmlWriter.RenderEndTag();

return stringWriter.ToString();
}
}

所有的 GenerateHTMLContent方法几乎都是相同的-它们在我的数据库中执行查询,在HTMLTextWriter的帮助下构建HTML表,并将该表作为字符串返回。

可以通过使用多线程或异步等待模式来改进此代码吗?有问题的代码是我将行附加到StringBuilder对象的地方。

编辑:我问这个问题,因为我以前从未使用过多线程,只是想知道是否有可能。此外,该程序现在可以运行得足够快。

最佳答案

StringBuilder sb = new StringBuilder();
Parallel.Invoke(
() => { var s = OverviewParagraph.GenerateHTMLContent(); lock (sb) sb.Append(s); },
() => { var s = PackageWeightParagraph.GenerateHTMLContent(); lock (sb) sb.Append(s); },
() => { var s = BoxWeightParagraph.GenerateHTMLContent(); lock (sb) sb.Append(s); },
() => { var s = CodeQualityParagraph.GenerateHTMLContent(); lock (sb) sb.Append(s); },
() => { var s = CodeQualityParagraph.GenerateHTMLContent(); lock (sb) sb.Append(s); }
);

关于c# - 可以通过使用多线程来改进此代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7859133/

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