Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net:Threadify重载API调用_C#_Asp.net_Multithreading - Fatal编程技术网

C# .Net:Threadify重载API调用

C# .Net:Threadify重载API调用,c#,asp.net,multithreading,C#,Asp.net,Multithreading,我有一个电子邮件队列,其中包含要发送的电子邮件。Web服务调用一个SOAP Web服务,该服务逐个处理队列 我们使用外部供应商的RESTAPI发送电子邮件。我的问题是,对该API的调用可能需要0.1ms到12s。我们向订阅我们通知的客户发送了数千封电子邮件,重要的是,在每批邮件中,队列中的第一批邮件与最后一批邮件之间不会有太多延迟(理想情况下,它们会同时发送) 我已经向卖主抱怨过,但由于他们很差劲,我确信他们不会对此采取任何行动 我能否以某种方式线程化这个过程,实例化对服务器的同时调用?服务器也

我有一个电子邮件队列,其中包含要发送的电子邮件。Web服务调用一个SOAP Web服务,该服务逐个处理队列

我们使用外部供应商的RESTAPI发送电子邮件。我的问题是,对该API的调用可能需要0.1ms到12s。我们向订阅我们通知的客户发送了数千封电子邮件,重要的是,在每批邮件中,队列中的第一批邮件与最后一批邮件之间不会有太多延迟(理想情况下,它们会同时发送)

我已经向卖主抱怨过,但由于他们很差劲,我确信他们不会对此采取任何行动


我能否以某种方式线程化这个过程,实例化对服务器的同时调用?服务器也是我的网络服务器,所以我不能使用所有的果汁。多少线程是合适的?这是个好主意吗?一般管理这些线程的最佳方法是什么?

您不应该在ASP.Net应用程序中创建线程。如果你有足够大的队列来保证多线程,你应该创建一个windows服务来处理队列。

我在ASP.NET应用程序中获得了一些成功。你可以在谷歌上搜索一些用法示例。

我会在数据库表中对电子邮件进行排队,并生成一个单独的windows服务,该服务会从表中读取内容,并为每封电子邮件生成一个线程,最大线程数限制为。数据库还可用于捕获吞吐量时间

您还应该了解供应商可以同时处理多少web服务请求。以密件传给您自己的电子邮件,以了解您端的同时提交是否最终成为其端的单线程传输。也许你可以开始买一个替代这个供应商的产品(你确实说过他们很烂)

如果你想从你自己的服务器上获得灵感和减轻工作量,你可以向云服务(Amazon Web Services、Microsoft Azure或Google App server)发送一批电子邮件,并在云上生成一个进程,将电子邮件同时发送给你的供应商


你也可以直接从云端发送电子邮件,至少你可以使用亚马逊。它们提供了一个默认限制,但是这里有一个关于如何删除限制的链接:。

没有必要自己生成线程。访问web服务的类已包含异步方法。对于每个webservice调用Foo,您将看到有一个
beginfo
EndFoo
方法。当webservice调用在另一个线程中完成时,
Beginfo
方法将立即返回一个对象


有关如何使用
IAsyncResult

的更多信息,请参阅。您不应该为此使用线程。ASP.NET中的线程确实有它的用途。@Hank:可能在高度专业化的情况下。就我个人而言,我觉得web应用程序中的多线程会破坏模型。这比其他模型更复杂,但ASP.NET对线程有一些规定。考虑一下需要2个以上的查询才能得到回复。供应商的好处是他们知道如何处理向hotmail、gmail等发送大量邮件的问题。您需要为每个域应用特定的规则。