Webservice -线程vs异步方法调用



我有一组web服务,每天被点击200万次;7 . web服务。每个服务当前都将传入的XML消息丢到磁盘(它是一个大磁盘)。

文件掉落发生在请求开始时,我想把它转到一个新线程上,这样我就不会失去写文件所需的20毫秒。是的,这20毫秒比你想象的更重要。

我使用的是。net 2.0,并且想到了两种方法:异步方法调用DropMessage()方法,或者启动一个新的线程并调用它。

private void DumpMessage()// this method dumps the incoming message to File.

DumpMessages管理它自己的业务。如果失败了,它知道该怎么做,以及如何联系我的团队。

public delegate void AsyncDumpMessage();
AsyncDumpMessage caller = new AsyncDumpMessage(DumpMessage);
IAsyncResult result = caller.BeginInvoke(null, null);

System.Threading.Thread t = new System.Threading.Thread(DumpMessage);
t.Start();

对以上两个有什么注意事项吗?我倾向于异步方法,因为通过我的测试,我已经获得了更好的性能

还有其他更好的方法吗?性能和稳定性对我来说是关键。

我会使用ThreadPool。QueueUserWorkItem用于调度此工作。

这将使用一个ThreadPool线程,它比启动一个单独的线程有更少的开销。它还建议使用"即发即忘"方法调用,其中异步委托调用建议您使用IAsyncResult

在更现代的框架版本中,我会推荐Task.Run,但这在。net 2中不起作用。

最新更新